![递归复制文件](https://linux22.com/image/850388/%E9%80%92%E5%BD%92%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6.png)
如何才能从一个目录及其所有子目录中复制 *.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
。这将模拟复制过程。