ディレクトリ内のすべてのファイルの名前に数字を加算または減算します。

ディレクトリ内のすべてのファイルの名前に数字を加算または減算します。

pngたとえば、ディレクトリに数字とという名前のファイルがたくさんあります。jpg0100.png

  • 10002.pngたとえば、名前を上書きせずに別々に名前を追加するにはどうすればよいですか0003.png0001.png0002.png

  • 2名前にならないようにどうやって0100.png名前を引くべきですか?098.png0098.png

関連https://stackoverflow.com/questions/26770060/subtracting-a-number-from-the-names-of-all-the-files-in-a-directoryしかし、ここではもっと難しいです。

ベストアンサー1

この場合、一時ディレクトリを使用することもできます。

for file in [[:digit:]]*.png; do
    echo mv $file tmp/$(printf %04d $((10#${file%.png}+1))).png
done

重要なのは、bashがこれをjustと10#N解釈するように強制することです。それ以外の場合、先行ゼロは8進数を表します。000NN

たとえば、

$ touch 0001.png 0002.png 0010.png 0020.png 0100.png 0200.png
$ for file in [[:digit:]]*.png; do echo mv $file tmp/$(printf %04d $((10#${file%.png}-1))).png; done
mv 0001.png tmp/0000.png
mv 0002.png tmp/0001.png
mv 0010.png tmp/0009.png
mv 0020.png tmp/0019.png
mv 0100.png tmp/0099.png
mv 0200.png tmp/0199.png

おすすめ記事