我有一个包含一堆文件的目录,其名称如下:
001234.jpg
001235.jpg
004729342.jpg
我想从所有文件名中删除前导零,所以我会留下:
1234.jpg
1235.jpg
4729342.jpg
我一直在尝试不同的 sed 配置,但找不到正确的语法。有没有一种简单的方法可以列出目录中的所有文件,通过 sed 进行管道传输,然后将它们移动或复制到不带前导零的新文件名?
我有一个包含一堆文件的目录,其名称如下:
001234.jpg
001235.jpg
004729342.jpg
我想从所有文件名中删除前导零,所以我会留下:
1234.jpg
1235.jpg
4729342.jpg
我一直在尝试不同的 sed 配置,但找不到正确的语法。有没有一种简单的方法可以列出目录中的所有文件,通过 sed 进行管道传输,然后将它们移动或复制到不带前导零的新文件名?
for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done
sed
本身就是错误的工具:您还需要使用一些 shell 脚本。
检查Rename multiple files with Linux page 以获得一些想法。建议的想法之一是使用rename
perl 脚本:
rename 's/^0*//' *.jpg
在可能是您的默认登录 shell 的 Bash 中,不需要任何外部命令。
shopt -s extglob
for i in 0*[^0]; do mv "$i" "${i##*(0)}"; done
尝试使用sed
,例如:
sed -e 's:^0*::'
完整循环:
for f in `ls`; do
mv $f $(echo $f | sed -e 's:^0*::')
done
也许不是最优雅的,但它会起作用。
for i in 0*
do
mv "${i}" "`expr "${i}" : '0*\(.*\)'`"
done
In Bash shell you can do:
shopt -s nullglob
for file in 0*.jpg
do
echo mv "$file" "${file##*0}"
done
我根本不知道 sed,但您可以使用以下方法获取列表find
:
find -type f -name *.jpg
因此,对于其他答案,它可能看起来像
find . -type f -name *.jpg | sed -e 's:^0*::'
但我不知道该 sed 命令是否成立。
这是不需要的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