我有一组文件夹和一组*.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
但是我觉得应该有一个更简单的解决方案(优雅的单线吗?而无需创建文件?……?)。我对吗?
如果您正在使用sed
,.DAT
则无需使用删除bash
:内置参数扩展${F%.DAT}
无需使用subshell和外部程序即可达到相同的效果。
如果目录相对于.DAT
文件位于任意位置,则目录列表文件是解决该问题的最有效方法,但是鉴于两个目录都位于同一位置,因此更直接的答案是:
find *.DAT | while read -r f; do if [ -d "${f%.DAT}" ]; then echo "${f%.DAT}" found; else rm "$f"; fi; done
请注意,这将处理带有嵌入式空格的文件名,而您的解决方案则不会。
对于其他外壳,可以使用类似的技术,但是我不能为它们辩护。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句