我正在尝试将图像文件从一个目录复制并重命名到另一个目录。
我想要复制的文件的文件名中嵌入了空格,我想用拍摄图像的日期替换部分文件名。
下面是我一直在使用的文件名和命令的示例,以及我看到的错误消息的示例。
例如,我想从源目录复制“2008_08_17_Transfer 001.jpg”文件,并在目标目录中将其重命名为“20090314001.jpg”,依此类推,对于源目录中以“2008_08_17_Transfer”开头的每个文件。
以下是我尝试过的方法以及看到的错误消息:
$ ls -l
total 241968
-rw------- 1 stephen stephen 1347770 Mar 14 2009 2008_08_17_Transfer 001.jpg
-rw------- 1 stephen stephen 1077919 Mar 14 2009 2008_08_17_Transfer 002.jpg
-rw------- 1 stephen stephen 1359947 Mar 14 2009 2008_08_17_Transfer 003.jpg
-rw------- 1 stephen stephen 1309175 Mar 14 2009 2008_08_17_Transfer 004.jpg
-rw------- 1 stephen stephen 1404298 Mar 14 2009 2008_08_17_Transfer 005.jpg
...
for i in *.jpg ; do scp -p "$i" /media/stephen/WDMyBook1_ext4/PicturesRenamedByDateTaken/2009/20090314/20090314`echo "$i" ` ; done
001.jpg: No such file or directory
002.jpg: No such file or directory
003.jpg: No such file or directory
答案1
for i in *.jpg ; do
cp -p "$i" "/media/stephen/WDMyBook1_ext4/PicturesRenamedByDateTaken/2009/20090314/20090314${i##* }"
done
shell 参数扩展${i##* }
会删除以空格结尾的最长前缀(即,直到00n.jpg
数字后缀之前的空格在内的所有内容)。无需使用echo
。
我假设这是一个本地副本,因此您不需要scp
。
注意:如果你想派生20090314
以目录名称的形式编程,这是可行的 - 但显然使事情变得有点复杂。
答案2
只需将文件名括起来,就像这样
for i in *.jpg ; do scp -p "$i" "/media/stephen/WDMyBook1_ext4/PicturesRenamedByDateTaken/2009/20090314/20090314`echo "$i" `" ; done