我有一个包含大量文件的目录,其名称如下:
001234.jpg
001235.jpg
004729342.jpg
我想从所有文件名中删除前导零,因此我将留下:
1234.jpg
1235.jpg
4729342.jpg
我一直在尝试不同的sed配置,但我找不到合适的语法。是否有一种简单的方法可以列出目录中的所有文件,通过sed管道,然后将它们移动或复制到新文件名而不带前导零?
答案 0 :(得分:10)
sed
本身就是错误的工具:你还需要使用一些shell脚本。
查看Rename multiple files with Linux页面了解一些想法。建议的一个想法是使用rename
perl脚本:
rename 's/^0*//' *.jpg
答案 1 :(得分:8)
for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done
答案 2 :(得分:7)
在Bash中,可能是您的默认登录shell,不需要外部命令。
shopt -s extglob
for i in 0*[^0]; do mv "$i" "${i##*(0)}"; done
答案 3 :(得分:1)
尝试使用sed
,例如:
sed -e 's:^0*::'
完成循环:
for f in `ls`; do
mv $f $(echo $f | sed -e 's:^0*::')
done
答案 4 :(得分:0)
也许不是最优雅但它会起作用。
for i in 0*
do
mv "${i}" "`expr "${i}" : '0*\(.*\)'`"
done
答案 5 :(得分:0)
我根本不知道sed,但您可以使用find
find -type f -name *.jpg
所以用另一个答案可能看起来像是
find . -type f -name *.jpg | sed -e 's:^0*::'
但我不知道该sed命令是否成立。
答案 6 :(得分:0)
这是一个不需要sed
的人:
for x in *.jpg ; do let num="10#${x%%.jpg}"; mv $x ${num}.jpg ; done
请注意,仅当文件名是所有数字时,此方法才有效。您还可以使用shell删除前导零:
for a in *.jpg ; do dest=${a/*(0)/} ; mv $a $dest ; done
答案 7 :(得分:0)
在Bash shell中,你可以这样做:
shopt -s nullglob
for file in 0*.jpg
do
echo mv "$file" "${file##*0}"
done