2

ギャップのある画像ファイルのリストの名前を順次に変更する方法を探しています。また、パディングを 4 にしたいと思います。現在、これをプログラムするために Python 2.7 と Linux bash を使用しています。

    Example:

    1.png
    2.png
    3.png
    20.png
    21.png
    50.png

次のようになります。

    0001.png
    0002.png
    0003.png
    0004.png
    0005.png
    0006.png

また、ファイル名を現在のディレクトリと同じにしたいと思います。

    Example:

    c_users_johnny_desktop_images.0001.png
    c_users_johnny_desktop_images.0002.png
    c_users_johnny_desktop_images.0003.png
    c_users_johnny_desktop_images.0004.png
    c_users_johnny_desktop_images.0005.png
    c_users_johnny_desktop_images.0006.png

どんな助けでも大歓迎です!:)

乾杯

4

3 に答える 3

1

シェルでこれを試してください:

rename -n '
    $s = substr(join("_", split("/", $ENV{PWD})), 1) . ".";
    s/(\d+)\.png/$s . sprintf("%04d", ++$c) . ".png"/e
' *.png

出力:

1.png -> c_users_johnny_desktop_images.0001.png
2.png -> c_users_johnny_desktop_images.0002.png
3.png -> c_users_johnny_desktop_images.0003.png
20.png -> c_users_johnny_desktop_images.0004.png
21.png -> c_users_johnny_desktop_images.0005.png
50.png -> c_users_johnny_desktop_images.0006.png

renamehttp://search.cpan.org/~pederst/rename/であり、多くのディストリビューションでデフォルトのrenameコマンドです。

コマンドもテストされると、-nスイッチを削除して実際に実行できます。

于 2012-11-08T00:22:58.140 に答える
1

これはパイソンです

#first collect all files that start with a number and end with .png
my_files = [f for f in os.listdir(some_directory) if f[0].isdigit() and f.endswith(".png")]
#sort them based on the number  
sorted_files = sorted(my_files,key=lambda x:int(x.split(".")[0])) # sort the file names by starting number
#rename them sequentially
for i,fn in enumerate(sorted_files,1): #thanks wim
    os.rename(sorted_files[i],"{0:04d}.png".format(i))

list.sort(key=...)その場でソートすることもできましたが、これは少し冗長で読みやすいと思いました...

于 2012-11-08T00:21:55.493 に答える
0

何とか何とか何とか。CSHは悪いです。BASHいいですね。パイソンのほうがいいです。ふざけんなよ。今でもTCSHを使っています...

% set i = 1
% foreach FILE ( `ls *[0-9].png | sort -n` )
    echo mv $FILE `printf %04d $i`.png ; @ i ++
    end

出力:

mv 1.png 0001.png
mv 2.png 0002.png
mv 3.png 0003.png
mv 20.png 0004.png
mv 21.png 0005.png
mv 50.png 0006.png


コメントへの対応:

まだ c_users_johnny_desktop_images が必要です。

わかりましたので、使用してください:

echo mv $FILE c_users_johnny_desktop_images.`printf %04d $i`.png ; @ i ++

私の例が読みにくかったわけではありません。

訂正: おそらく、現在のディレクトリ名を自動的に抽出して組み込むつもりでした。例えば:

echo mv $FILE `echo $cwd | sed -e 's|^/||' -e 's|/|_|g'`.`printf %04d $i`.png ; @ i ++

-

グロブは tcsh に存在しませんか? あなたの ls の解析は怖いようです

もちろん、グロブは存在します。それがlsに渡されるものです。しかし、グロビングは、1、2、20、21、3、50 のように、アルファベット順にソートされたリストを提供します。1,2,3,20,21,50 のように、数値で並べ替える必要があります。数値に先行ゼロがない場合の標準的な問題。

sort -nは数値ソートを行います。 lsは、各ファイル名の後に改行を追加します。同様に簡単に書くことができます:

foreach FILE ( `echo *[0-9].png | tr ' ' '\012' | sort -n` )

しかし、私は怠け者で、lsが改行をしてくれます。何がそんなに怖いの?

于 2012-11-08T02:01:54.560 に答える