Shell腳本:當同名資料夾不存在時刪除文件

Shell腳本:當同名資料夾不存在時刪除文件

我有一組資料夾和一組*.DAT文件。如果不存在同名(不帶 )的資料夾,
我想刪除檔案。 我花了一些時間才找到這個解決方案:*.DAT.DAT

find . -type d > dirs.txt
for F in `find *.DAT`
do
  F=$(sed 's|\.DAT||g' <<< $F)
  if grep "$F" dirs.txt; then
    echo "$F found"
  else
    rm $F.DAT
  fi
done

但我覺得應該有一個更簡單的解決方案(優雅的一句台詞?無需創建文件?...?)。我對嗎?

答案1

如果您正在使用 ,則無需使用sed來刪除:內建參數擴充無需使用子 shell 和外部程式即可實現相同的效果。.DATbash${F%.DAT}

如果目錄位於相對於.DAT檔案的任意位置,那麼目錄清單檔案是解決該問題的最有效方法,但考慮到兩者都位於同一位置,更直接的答案是:

find *.DAT | while read -r f; do if [ -d "${f%.DAT}" ]; then echo "${f%.DAT}" found; else rm "$f"; fi; done

請注意,這將處理帶有嵌入空格的檔案名,而您的解決方案則不會。

對於其他 shell,可以使用類似的技術,但我不能代表它們。

相關內容