递归复制文件

递归复制文件

如何才能从一个目录及其所有子目录中复制 *.txt 文件?

假设我有一个文件夹 A,其中包含 .txt 文件和子文件夹 BC 等,其中包含 .txt 文件等等,而我只想要所有的 .txt 文件?

答案1

这将找到从当前文件夹 (.) 开始的所有 .txt 文件,并将它们逐个 scp 到主机名并将它们放在主文件夹中。

for filename in $( find . -name '*.txt' ); do scp "$filename" hostname:~/ ; done

编辑:重要的是要注意,如果文件名中有空格,则需要在文件名周围加上引号,如果有,而您没有引用它,那么应用程序会将其视为多个参数而不是一个参数。

答案2

尝试这个命令:

 cd /Parent directory
    find . -name '*.txt' | cpio -pdm /pathtowhereyouwanttocopy

此代码只会复制 .txt 文件并将其与其父文件夹一起保存在目录中。

cpio copies files into an archive. It reads a list of filenames

find searches the directory tree rooted at each given file name

-pdm for overwrite destination content

答案3

我个人会用它rsync来实现这个目的。你可以轻松地按扩展名过滤文件。它还提供了有关传输进度的全面详细信息。

rsync -vr --stats --progress --include="*/" --include "*.txt" --exclude='*' SOURCE DEST

您提到,当您在自己的机器上时X,您想获取机器上的所有文件Y。 在这种情况下,您应该这样做:

scp username@Y:/path/to/directory/on/remote/machine /path/to/destination/on/X/local/machine

现在让我们把它们放在一起:

rsync -vr --stats --progress --include="*/" --include "*.txt" --exclude='*' username@Y:/path/to/directory/on/remote/machine /path/to/destination/on/X/local/machine

您可以尝试运行测试,而无需实际复制任何内容,只需在命令--dry-run中添加内容即可rsync。这将模拟复制过程。

相关内容