2016-09-17 74 views
0

存在我有以下文件夾結構中的文件夾/ 1:Linux命令行刪除文件遞歸其不在其它文件夾

/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 

謝謝!

回答

2

這裏是一種與find做到這一點,一個簡單的while循環在bash:

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 

運行一次呼應,如果它會刪除正確的文件,如果一切正常,運行它再次有從rm刪除echo

+0

我建議追加'||。退出1'到'cd/path/to/2'。 – Cyrus

+0

@Cyrus好主意。 – redneb

+0

@redneb謝謝 - 看起來正是我所需要的。但是我得到:第3行:-r:命令沒有找到 – domi771

相關問題