ファイル名のスペースを正しく処理するオプションのスクリプトバージョンはありますか?
これは難しい問題です。ファイル名のスペースを処理するようにピックを簡単に拡張できますが、出力はファイル名にすぎないため、パディングされた名前の開始位置または終了位置は表示されません。
私の目標は、次のようなことを言うことです。
for i in `pick .??*` ; do ... ; done
しかし、私が知っている限り、それは絶望的です。$()
バックティックの代わりに構文を使用しても、選択から処理までファイル名をそのまま保持するにはどうすればよいですか?
私が考えることができる唯一のツールは、任意の名前を持つことがxargs -0
できるツールです。しかし、fromを除いて、このツールと対話する方法がわかりませんfind -0
。
編集:Pickは、複数のファイルをインポートして、どのファイルが欲しいのか、望ましくないのかを尋ねるスクリプトです。
バラより http://examples.oreilly.de/english_examples/upt3/split/pick サンプル。複雑ではありませんが、シェルスクリプト内でリダイレクトする方法がわからない場合、または以前にこの設定を見たことがない場合は驚くことができます。
はい、1行に1つのファイル名を出力します。
答え1
ファイル名が1行ずつ出力される場合は、改行のみを含めるようにpick
設定できます。IFS
たとえば(Bashから):
saved_ifs=$IFS
IFS=$'\n'
for i in $(pick .??*) ; do ... ; done
IFS=$saved_ifs
これにより、ファイル名にスペースとタブを含めることができますが、もちろん改行文字が含まれている場合でも問題が発生します。 glob文字(または*
)を含むファイル名がある場合は、?
globbingを無効にすることをお勧めします。set -f
無効にしてset +f
再度有効にするために使用されます。
答え2
find -name "* *" -type f -exec rename 's/ /_/g' {} +
ファイル名のスペースを「_」に置き換えます。
次に選択を使用します。
理由:ファイル名の空白は、非標準のファイル命名規則と見なされることがよくあります。成功したITは、Sun Tzuの兵法を彷彿とさせる毎回同じ方法で作業を行うことです。戦闘を慎重に選択してください。