Shell-Script
同步兩個目錄:相同的文件名,不同的文件結尾,不同的文件內容
我有 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。
find
和bash
:_
cd
到 and 的父目錄images
並labels
執行: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
才能真正刪除文件。要刪除您的空目錄,請參閱如何刪除子樹中的所有空目錄?.