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 文件。我想从所有 50000 个目录中复制这个 transaction.log 文件并将它们存储在一个 tar 文件中。

如果有办法,你能帮我吗?

谢谢。

解决方案:

Okies,我发现了这个问题,因为有一些指向其他磁盘的符号链接发现工作不正常。解决方案是使用 -follow 选项和 find 来跟踪符号链接。谢谢。我使用以下命令

寻找 。-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

假设您还想存储目录路径:

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

这会将在该目录结构中找到的每个 transaction.log 文件存储在 /tmp/stuff.tar 中。

于 2012-08-27T21:52:38.187 回答
0

查找 /user/foo/dirs -name transaction.log | tar -cv -T- -f /tmp/stuff.tar

于 2012-08-27T22:37:00.127 回答