2016-12-07 14 views
0

複数のイメージの名前を一括して変更し、親ディレクトリをベース名として使用する必要があります。別のものを上書きしないようにするには、接尾辞を追加する必要があります。名前変更プロセスの順序は、ファイルのタイムスタンプに従わなければなりません。 「最初の」ファイルは私がそれを使用しているサイトのおすすめ画像です。Linux:名前の順に複数のファイルを親ディレクトリ+サフィックスに一括して名前を変更します。

ツリー:

└── main 
├── white tshirt 
│   ├── IMG_1.jpg 
│   ├── IMG_2.jpg 
│   ├── IMG_3.jpg 
│   └── IMG_4.jpg 
├── black tshirt 
│   ├── IMG_1.jpg 
│   ├── IMG_2.jpg 
│   ├── IMG_3.jpg 
│   └── IMG_4.jpg 
└── red tshirt 
    ├── IMG_1.jpg 
    ├── IMG_2.jpg 
    ├── IMG_3.jpg 
    └── IMG_4.jpg 

目標:

└── main 
├── white tshirt 
│   ├── white-tshirt-1.jpg 
│   ├── white-tshirt-2.jpg 
│   ├── white-tshirt-3.jpg 
│   └── white-tshirt-4.jpg 
├── black tshirt 
│   ├── black-tshirt-1.jpg 
│   ├── black-thisrt-2.jpg 
│   ├── black-tshirt-3.jpg 
│   └── black-tshirt-4.jpg 
└── red tshirt 
    ├── red-tshirt-1.jpg 
    ├── red-tshirt-2.jpg 
    ├── red-tshirt-3.jpg 
    └── red-tshirt-4.jpg 

はダッシュとスペースの交換が必要ですが、好ましいものではありません。プラットフォーム:Debianの8

+0

プログラマーを雇ったことはありますか? – melpomene

+0

コードスニペットのためにプログラマーを雇うことができる場所はありますか? – johnny538

答えて

1

私は、これは仕事をすべきだと思う:

#!/bin/sh 

for dir in *; do 
    if [ ! -d "$dir" ]; then 
     continue 
    fi 

    cd "$dir" 

    pref=$(echo "$dir" | tr ' ' -) 

    i=1 
    ls -tr | while read f; do 
     ext=$(echo "$f" | sed 's/.*\.//') 
     mv "$f" "${pref}-${i}.$ext" 
     i=$(expr $i + 1) 
    done 

    cd .. 
done 

あなたのメインディレクトリ内のスクリプトを起動し、ターゲットフォルダはそれでしかないことを確認してください。また、ファイル名に '\'という文字が含まれていないことを確認してください。

+0

ファイル名のいずれかにスペースが含まれていると、これはおそらく失敗します。 – melpomene

+0

あなたは正しいです、ありがとうございます。一定。 – UnrealEagle

+0

ファイル名のいずれかにバックスラッシュが含まれている(またはバックスラッシュで終わっていますか?)場合は、失敗するようです。 – melpomene

関連する問題