1

Linux の何千ものディレクトリから特定のファイル「transaction.log」をコピーし、同じ特定のファイルを含む tar ファイルを作成したい状況があります。

例: /user/foo/dirs/ の下に何千ものディレクトリがあります

/user/foo/dirs/dir1
/user/foo/dirs/dir2
/user/foo/dirs/dir3
..
..
..
/user/foo/dirs/dir50000

各ディレクトリには、いくつかのファイルと transaction.log ファイルがあります。この transaction.log ファイルを 50000 個のディレクトリすべてからコピーし、それらを tar ファイルに保存したいと考えています。

何かいい方法があれば教えていただけないでしょうか?

ありがとう。

解決:

わかりました、問題が見つかりました。他のディスクへのシンポリティックリンクがいくつかあったため、うまく機能していませんでした。解決策は、シンボリック リンクをたどるために、find で -follow オプションを使用することです。ありがとう。次のコマンドを使用します

探す 。-follow -type f -name "transaction.log" | tar --create --files-from - > /foo/Stats_transaction_Object.tar.gz

4

4 に答える 4

2

{} を含むものは悪くありませんが、ファイルごとに個別の tar プロセスを実行します。これは単一の tar プロセスであるため、かなり高速です。

find /where/ever -name transaction.log -print | tar --create --files-from - > /somewhere/else/foo.tar
于 2012-08-27T22:23:01.077 に答える
1

次のコマンドを使用できます。

cd /user/foo/dirs/
find . -type f -name "transaction.log" | xargs tar -zcvf transaction_logs_backup.tar.gz
于 2012-08-27T22:29:32.253 に答える
0

/user/foo/dirs -name transaction.log を検索 | tar -cv -T- -f /tmp/stuff.tar

于 2012-08-27T22:37:00.127 に答える
0

ディレクトリ パスも保存するとします。

find /user/foo/dirs/ -name 'transaction.log' -exec tar rf /tmp/stuff.tar {} \;

これにより、そのディレクトリ構造内で見つかったすべての transaction.log ファイルが /tmp/stuff.tar に保存されます。

于 2012-08-27T21:52:38.187 に答える