次のような名前のファイルがたくさんあるディレクトリがあります。
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
それ自体はこれには間違ったツールです。シェルスクリプトも使用する必要があります。
いくつかのアイデアについては、Linuxページで複数のファイルの名前を変更するをチェックしてください。提案されたアイデアの1つは、rename
perlスクリプトを使用することです。
rename 's/^0*//' *.jpg
デフォルトのログインシェルである可能性が高い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
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
これは、ファイル名がすべて数字の場合にのみ機能することに注意してください。シェルを使用して先行ゼロを削除することもできます。
for a in *.jpg ; do dest=${a/*(0)/} ; mv $a $dest ; done
Bashシェルでは、次のことができます。
shopt -s nullglob
for file in 0*.jpg
do
echo mv "$file" "${file##*0}"
done