2016-09-17 6 views
0

に存在してはいけないこれは再帰的にファイルを削除します。Linuxのコマンドライン私は、フォルダ/ 1に次のフォルダ構造を持っている他のフォルダ

/1/1/ 
    1.png 
    2.png 
    5.png 
    6.png 

/1/2/ 
    3.png 
    4.png 

/1/3/ 
    10.png 
    11.png 
    14.png 

この例では、サブフォルダ1-3があります。実際には何百ものフォルダが生きています。各サブフォルダには未知の量のpngファイルが含まれています。

それから私は、フォルダ/ 1、それにまったく同じサブフォルダ構造が、より多くの画像を持っているフォルダ/ 2を持っている:

/2/1/ 
    1.jpg 
    2.jpg 
    3.jpg 
    4.jpg 
    5.jpg 
    5.jpg 

/2/2/ 
    1.jpg 
    2.jpg 
    3.jpg 
    4.jpg 

/2/3/ 
    10.jpg 
    11.jpg 
    12.jog 
    13.jpg 
    14.jpg 

フォルダ2(.JPG)で、異なるファイル拡張子を注意してください。ファイルの共通点はファイル名だけです。拡張子はフォルダ/ 1と/ 2では異なります。

私がLinuxで達成しようとしているのは、フォルダ/ 2をきれいにして、同じ名前のフォルダ/ 1にファイルが存在する画像だけです。

誰でも私にコマンドラインまたはbashスクリプトから使用できるコマンドを提供できますか?

フォルダ/ 2での最終的な結果は次のようになります。

/2/1/ 
    1.jpg 
    2.jpg 
    5.jpg 
    6.jpg 

/2/2/ 
    3.jpg 
    4.jpg 

/2/3/ 
    10.jpg 
    11.jpg 
    14.jpg 

ありがとうございました!それが正しいファイルを削除し、すべてがOKに見える場合、持っ再びそれを実行してしまう場合、それは一度エコーする

cd /path/to/2 || exit 1 
find -type f -name '*.jpg' -print0 | 
    while IFS= read -r -d '' path; do 
     if [[ ! -e "/path/to/1/${path%.jpg}.png" ]]; then 
        # ^^^^^^^^^^ adjust this path 
      echo rm -- "$path" 
      #^^^^ remove this after the first dry-run 
     fi 
    done 

実行します。ここでは

答えて

2

findでこれを行う方法とはbashでシンプルwhileループですechormから削除しました。

+0

私は、 '|| exit 1'を 'cd/path/to/2'にコピーします。 – Cyrus

+0

@Cyrus良いアイデア。 – redneb

+0

@rednebありがとう - 私が必要とするもののように見えます。しかし、私は得る:行3: - r:コマンドが見つかりません – domi771

関連する問題