
我有一組資料夾和一組*.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 和外部程式即可實現相同的效果。.DAT
bash
${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,可以使用類似的技術,但我不能代表它們。