10

次のような名前のファイルがたくさんあるディレクトリがあります。

001234.jpg
001235.jpg
004729342.jpg

すべてのファイル名から先行ゼロを削除したいので、次のようになります。

1234.jpg
1235.jpg
4729342.jpg

sedのさまざまな構成を試しましたが、適切な構文が見つかりません。ディレクトリ内のすべてのファイルを一覧表示し、sedにパイプして、先行ゼロなしで新しいファイル名に移動またはコピーする簡単な方法はありますか?

4

8 に答える 8

14
for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done
于 2010-01-15T20:58:30.267 に答える
11

sedそれ自体はこれには間違ったツールです。シェルスクリプトも使用する必要があります。

いくつかのアイデアについては、Linuxページで複数のファイルの名前を変更するをチェックしてください。提案されたアイデアの1つは、renameperlスクリプトを使用することです。

rename 's/^0*//' *.jpg
于 2010-01-15T20:59:16.407 に答える
8

デフォルトのログインシェルである可能性が高いBashでは、外部コマンドは必要ありません。

shopt -s extglob
for i in 0*[^0]; do mv "$i" "${i##*(0)}"; done
于 2010-01-15T21:43:59.063 に答える
1

を使用してみてくださいsed。例:

sed -e 's:^0*::'

完全なループ:

for f in `ls`; do
   mv $f $(echo $f | sed -e 's:^0*::')
done
于 2010-01-15T20:52:16.373 に答える
1

おそらく最もエレガントではありませんが、それは機能します。

for i in 0*
do
mv "${i}" "`expr "${i}" : '0*\(.*\)'`"
done
于 2010-01-15T20:57:23.020 に答える
0

sedはまったくわかりませんが、次を使用してリストを取得できますfind

find -type f -name *.jpg

だから他の答えではそれは次のように見えるかもしれません

find . -type f -name *.jpg | sed -e 's:^0*::'

しかし、そのsedコマンドが有効かどうかはわかりません。

于 2010-01-15T20:57:23.183 に答える
0

これは必要のないものですsed

for x in *.jpg ; do let num="10#${x%%.jpg}"; mv $x ${num}.jpg ;  done

これは、ファイル名がすべて数字の場合にのみ機能することに注意してください。シェルを使用して先行ゼロを削除することもできます。

for a in *.jpg ; do dest=${a/*(0)/} ; mv $a $dest ; done
于 2010-01-15T21:17:05.183 に答える
0

Bashシェルでは、次のことができます。

shopt -s nullglob
for file in 0*.jpg
do
   echo mv "$file" "${file##*0}"
done
于 2010-01-15T23:59:21.210 に答える