[英]How to copy multiple files with varying version numbers from one directory to another using bash?
我有一个文件夹/home/user/Document/filepath ,其中有三个文件,即 file1-1.1.0.txt、file2-1.1.1.txt、file3-1.1.2.txt
和另一个名为/home/user/Document/backuppath的文件夹,我必须从/home/user/Document/folderpath移动文件,其中包含 file1-1.0.0.txt、file2-1.0.1.txt 和 file3-1.0.2 。TXT
总结一下:
the below is the files.txt where I listed the files which has to be copied:
file1-*.txt
file2-*.txt
The below is the move.sh script that execute the movements
for file in `cat files.txt`; do cp "/home/user/Document/folderpath/$file" "/home/user/Documents/backuppath/" ; done
对于上面的脚本,我收到类似的错误
cp: cannot stat '/home/user/Document/folderpath/file1-*.txt': No such file or directory found
cp: cannot stat '/home/user/Document/folderpath/file2-*.txt': No such file or directory found
我想完成的是我想使用脚本复制特定文件,使用 * 代替版本号。,因为版本号将来可能会有所不同。
您的 files.txt 中有通配符。 在您的cp
命令中,您使用的是引号。 这些引号阻止了通配符的扩展,您可以从错误消息中清楚地看到这一点。
一种明显的可能性是不使用引号:
cp /home/user/Document/folderpath/$file /home/user/Documents/backuppath/
或者根本不使用循环:
cp $(<files.txt) /home/user/Documents/backuppath/
但是,如果files.txt
中的一行是包含空格的文件名模式,这当然会中断。 因此,我建议在扩展模式上进行第二个循环:
while read file # Puts the next line into 'file'
do
for f in $file # This expands the pattern in 'file'
do
cp "/home/user/Document/folderpath/$f" /home/user/Documents/backuppath
done
done < files.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.