簡體   English   中英

Bash命令從所有文件名中刪除前導零

[英]Bash command to remove leading zeros from all file names

我有一個目錄,其中包含一堆名稱如下的文件:

001234.jpg
001235.jpg
004729342.jpg

我想從所有文件名中刪除前導零,所以我將留下:

1234.jpg
1235.jpg
4729342.jpg

我一直在嘗試不同的sed配置,但我找不到合適的語法。 有沒有一種簡單的方法可以列出目錄中的所有文件,通過sed管道,然后將它們移動或復制到新文件名而不帶前導零?

sed本身就是錯誤的工具:你還需要使用一些shell腳本。

檢查使用Linux頁面重命名多個文件以獲取一些想法。 建議的一個想法是使用rename perl腳本:

rename 's/^0*//' *.jpg
for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done

在Bash中,可能是您的默認登錄shell,不需要外部命令。

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

我根本不知道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

在Bash shell中,您可以:

shopt -s nullglob
for file in 0*.jpg
do
   echo mv "$file" "${file##*0}"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM