用bash重命名文件,保持原件不变

时间:2010-07-21 07:25:56

标签: bash shell

我有一个包含大量图像的文件夹,用于多语言网站,图像以下一格式存储.file.lang_code.jpg,在部署脚本上我想为我正在部署的网站选择正确的图像将它复制到filename.jpg,这样我就可以在站点之间共享相同的CSS。

所以,我需要的是命令重命名,但执行副本,而不是移动,因为我需要保留所有文件。

我正在使用下一个代码,但我发现它过于复杂且非常糟糕。

find -name "*.es.*" -print0 | xargs --null -I {} sh -c "echo {} | sed 's/.es//' | xargs -I }{ sh -c 'cp {} }{'"

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

find -name '*.es.*' -exec bash -c 'cp "$1" "${1/.es./.}"' modlang {} \;

答案 2 :(得分:1)

bash 4

shopt -s globstar
for file in **/*.es*
do
  newfilename=${file/.es/}
  cp "$file" ""$newfilename"
done

使用find

find . -type f -iname "*.es.*" -print | sed 's/\(.*\)\.es\.\(.*\)/mv \1.es.\2 \1\2/' |bash

答案 3 :(得分:0)

for循环怎么样?

for x in *.es.* ; do
  xx=$(echo ${x} | sed 's/\.es//')
  cp ${x} ${xx}
done

答案 4 :(得分:0)

嗯..你可以复制你想要的所有jpg,把它们放在你需要的目录中,然后从那里重命名它们?

类似的东西:

cp *.jpg /src /dst
cd /dst && rename 's/\.es//' *.jpg

rename命令是perl脚本的包装器。