按名称查找所有目录中的文件并使用 rsync 复制到另一个目录

按名称查找所有目录中的文件并使用 rsync 复制到另一个目录

我已经每行列出了文件名,list.txt如下所示

filename1.pdf   
file456.pdf  
file33.txt  
.......  

我想按目录中的文件名(包括源中的所有子文件夹)进行搜索并将它们复制到目标目录(全部在一个目录中)

rsync -a /var/www/html/source-directory  --files-from=/home/directory/list.txt /var/www/html/target-directory

该命令工作正常,但它仅搜索源目录,而不搜索文件夹内。

答案1

你不需要rsync这个。对于每个文件,您需要找到它,然后将其复制到目的地

src='/var/www/html/source-directory'
dst='/var/www/html/target-directory'

while IFS= read -r file
do
    echo "Checking '$file'" >&2
    find "$src" -type f -name "$file" -exec cp -a {} "$dst/" \;
done <list.txt

如果您可以保证每个命名文件只有一个,则某些版本find将有一个-quit可以附加的选项,以便它在每个文件的第一个匹配处停止。

相关内容