繁体   English   中英

如何使用 bash 将多个版本号不同的文件从一个目录复制到另一个目录?

[英]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

  1. 任务是将特定文件从文件夹路径复制到备份路径。

总结一下:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM