2017-03-25 3 views
1

すべてのディレクトリで特定のファイルの名前を繰り返し変更しようとしています。サブディレクトリのパターンに従って名前を変更してコピーを作成するbashスクリプト

homefolder/folder1/ouput/XXXXX_ab.png 
homefolder/folder1/ouput/XXXXX_abcdefg.png 
homefolder/folder2/ouput/XXXXX_ab.png 
homefolder/folder2/ouput/XXXXX_abcdefg.png 
homefolder/folder3/ouput/XXXXX_ab.png 
homefolder/folder3/ouput/XXXXX_abcdefg.png 
... 
homefolder/folder500/ouput/XXXXX_ab.png 
homefolder/folder500/ouput/XXXXX_abcdefg.png 

私はフォルダ名(例:のfolder1フォルダ2、... folder500)を取得し、接頭辞として2つのPNGファイルにそれを渡し、Xこれら5 を削除したいです各ファイルの先頭に。 これらのpngファイルのパターンは以下のとおりです。

XXXXX_ab.png 
XXXXX_abcdrfg.png 

はこれだけで最初の5つの文字は、これらのフォルダ名、親ディレクトリの名前に置き換えられます各サブディレクトリ、で異なっています。

結果は次のようになります。名前変更の終わり

homefolder/folder1/ouput/folder1_ab.png 
homefolder/folder1/ouput/folder1_abcdefg.png 
homefolder/folder2/ouput/folder2_ab.png 
homefolder/folder2/ouput/folder2_abcdefg.png 
homefolder/folder3/ouput/folder3_ab.png 
homefolder/folder3/ouput/folder3_abcdefg.png 
... 
homefolder/folder500/ouput/folder500_ab.png 
homefolder/folder500/ouput/folder500_abcdefg.png 

は、 all_png_folderたとえばため、homefolderで別のフォルダ内にこれらの二つの新たな名前が変更されたファイルのコピーを作成します。

find . -iname "*_ab.png" -exec rename _ab.png folder1_ab.png '{}' \; 
find . -name "*_ab.png" -exec cp {} ./all_png_folder \; 
+0

動作しませんか? – Cyrus

答えて

2

ここは始まりです。最後のコピーは簡単に追加する必要があります。

#!/usr/bin/env bash 

files=$(find . -type f -name "*_ab.png" -or -name "*_abcdefg.png") 

for file in $files; do 
    foldername=$(cut -d '/' -f 2 <<< $file) 

    # The name of the png-file minus the leading xxxxxx 
    pngfile=$(basename "$file" | cut -d '_' -f 2) 
    destinationdir=$(dirname "$file") 
    mv $file "$destinationdir/$foldername"'_'"$pngfile" 
done 

デモ

$ tree   
. 
├── folder1 
│   └── ouput 
│    ├── foo_bar.png 
│    ├── xxxxx_abcdefg.png 
│    └── xxxxx_ab.png 
├── folder2 
│   └── ouput 
│    ├── xxxxx_abcdefg.png 
│    └── xxxxx_ab.png 
└── rename.sh 

4 directories, 6 files 
$ ./rename.sh 
$ tree 
. 
├── folder1 
│   └── ouput 
│    ├── folder1_abcdefg.png 
│    ├── folder1_ab.png 
│    └── foo_bar.png 
├── folder2 
│   └── ouput 
│    ├── folder2_abcdefg.png 
│    └── folder2_ab.png 
└── rename.sh 
+0

私はこのアクションを "_ab.png"と "_abcdefg.png"ファイルにのみ適用したいので、残りのすべてのpngファイルをフォルダに保存します。ただし、これらの2つのファイルは、ファイル名の先頭に常に同じ文字数を持ちます(たとえばXXXXX、常に5文字)。 – passion

+1

@passion編集を参照 –

関連する問題