このようなテキストファイルの束から_tb2
_ファイルを作成したいと思います。 tar cfj $(basename ./2014_04_09.txt .txt).tb2 $(basename ./2014_04_09.txt)
このコマンドを使用すると、ディレクトリを含まないアーカイブファイル_2014_04_09.tb2
_を作成できます。
しかし、このようにfind
の_-exec
_オプションを指定してコマンドを適用すると、
find . -name "*.txt" -exec tar cfj $(basename "{}" .txt).tb2 $(basename "{}") \;
このコマンドは、元の拡張子(_2014_04_09.txt.tb2
_)とアーカイブ内のディレクトリを持つアーカイブファイルを作成します。
単一のファイルのみを適用する場合のように、tar
コマンドをfind
とともに使用するにはどうすればよいですか。
代わりに、シェルコマンドを-exec
する必要があります。
find . -name "*.txt" -exec sh -c 'tar cfj $(basename "{}" .txt).tb2 "{}"' -- {} \;
さらに、find
コマンドはfindingすべてのレベルのファイルであることに注意してください。そのため、ファイルが現在のディレクトリに存在しない場合、basename
を使用してファイルのリストを渡すことは機能しません。
詳述すると、
tar cfj foo.tb2 foo.txt
foo.txt
が現在のディレクトリに存在しない場合、エラーが発生します。そのため、パスをfoo.txt
に渡す必要があります。