Shell-Script

同步兩個目錄:相同的文件名,不同的文件結尾,不同的文件內容

  • July 2, 2019

我有 2 個帶有子目錄的文件夾。一個帶有訓練圖像,一個帶有訓練標籤。

  • 一張圖片只屬於一個標籤

  • 圖片和標籤有不同的內容

  • 圖像和標籤可以在相似的路徑中找到。例如:

    • 圖片/18/1334/image1。網頁
    • 標籤/18/1334/image1。PNG
  • 文件名(不是副檔名)相同

  • 一個子目錄下可以有多個文件

如何刪除沒有相應圖像的每個標籤(反之亦然)?例如:

圖片:

.
|---18
    |---a1
    |    |---a1.webp
    |    |---a11.webp
    |---a2
    |    |---a2.webp
    |---a3

標籤

.
|---18
    |---a1
    |    |---a1.png
    |    |---a11.png
    |---a2
    |    |---a2.png
    |---a3
         |---a3.png  

好的解決方案(如果沒有相應的標籤或圖像,請刪除文件):

.
|---18
    |---a1
    |    |---a1.*
    |    |---a11.*
    |---a2
    |    |---a2.*
    |---a3

最佳解決方案(也刪除現在為空的文件夾):

.
|---18
    |---a1
    |    |---a1.*
    |    |---a11.*
    |---a2
         |---a2.*

星號* 代表 webp 或 png。

findbash:_

cd到 and 的父目錄imageslabels執行:

find . \( -name "*.webp" -o -name "*.png" \) -type f -exec bash -c '
if [ "${1##*.}" = "webp" ]; then
 file=${1/\/images\//\/labels\/} 
 file=${file%webp}png
else
 file=${1/\/labels\//\/images\/}
 file=${file%png}webp
fi
[ ! -f "$file" ] && echo rm "{}"
' bash {} \;

您需要刪除echo才能真正刪除文件。

要刪除您的空目錄,請參閱如何刪除子樹中的所有空目錄?.

引用自:https://unix.stackexchange.com/questions/527882