サブディレクトリ内のテキスト ファイルからファイルのリストを検索し、tarball に格納しますか?

サブディレクトリ内のテキスト ファイルからファイルのリストを検索し、tarball に格納しますか?

tarする必要があるファイルのリストがあります。通常は、

tar -cvf allfiles.tar -T mylist.txt

しかし、必要なファイルはサブディレクトリに分散しており、リストにはパスではなくファイル名のみが含まれていることがわかりました。

「find」と tar コマンドを組み合わせて、リスト上のファイルがサブディレクトリのどこに保存されていても、それらを検索する方法はありますか?

答え1

名前のリストとを使用してパスを見つけることができますfindが、異なるディレクトリに同じ名前のファイルがある場合、ちょっとした例外が発生する可能性があります。

あまり問題にならない場合は、次の操作を実行できます。

find <main_directory> | grep -f mylist.txt

次に、リストをtarコマンドに使用します。完全なコマンドは次のようになります。

tar cvf allfiles.tar -T <(find <main_directory> |
    grep -f mylist.txt --color=never)

あなたに気づくしなければならないを使用してください--color=never。そうしないと、grep で色がアクティブになっている場合に、 に無効な入力が送信されることになりますtar

この場合、大文字と小文字の区別を無視すると、grep実際にはフィルタリングファイルには、フラグを追加するだけです-i:

tar cvf allfiles.tar -T <(find <main_directory> |
    grep -i -f mylist.txt --color=never)

関連情報