サブディレクトリのテキストファイルからファイルのリストを見つけて、tarballに入れますか?


1

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

tar -cvf allfiles.tar -T mylist.txt

しかし、私は必要なファイルがサブディレクトリに散らばっていて、私のリストにはパスではなくファイル名しかないことを発見しました。

サブディレクトリのどこにファイルが置かれていても、 "find"とtarコマンドを組み合わせて私のリストのファイルを見つける方法はありますか?

回答:


5

名前のリストを使ってパスを見つけることができます。 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)

理にかなっています。大文字小文字を区別しないでリストを解析するようにtarに指示する方法はありますか?これはWindowsサーバなので、人々はディレクトリの命名にあまり注意を払っていませんでした。
Steve

@最後のコマンドラインでうまくいくかどうかを確認してください。
Rubens

&lt; (見つける...)の前に何をしますか?
Steve

2
@コマンドを実行するときに、それをトレースします。 <()つまり、実行中のコマンドの出力をファイル自体と見なすようにシェルに指示しているのであれば、ファイル記述子を返します。 <file> パラメータ tar ... -T <file>。改行は、スクロールバーを避けるためのものです。コマンド自体に改行はありません。
Rubens
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.