Unix shell 循环检查一个目录是否存在于多个目录中
Unix shell loop to check if a directory exists inside multiple directories
我有这样的文件夹结构:
/home/
/folder1/
/backup/
/folder2/
/backup/
/folder3/
/folder4/
/backup/
/folder5/
(如您所见,并非所有目录“文件夹”都有目录“备份”)
我需要检查“文件夹”中是否存在“备份”目录并将其删除。
我正在使用这个命令:
for d in /home/* ;
do [ -d "$d/backup" ]
&& echo "/backup exists in $d"
&& rm -rf "$d/backup"
&& echo "/backup deleted in $d" ;
done
但它不起作用。请帮忙。
find . -type d -name "backup" -delete -print
很明显,备份目录下的所有内容都会丢失。
这将递归到您的目录中。如果你需要限制在第一层,你可以这样做:
find . -maxdepth 1 -type d -name "backup" -delete -print
这两个命令都将打印已删除的目录。没有输出 == 没有找到目录,什么也没做。
最后,您要避免像您尝试的那样在文件或目录名称上循环,因为您的文件或目录名称中可能包含空格。此处提供完整的讨论和解决方案:https://mywiki.wooledge.org/BashFAQ/001
我有这样的文件夹结构:
/home/
/folder1/
/backup/
/folder2/
/backup/
/folder3/
/folder4/
/backup/
/folder5/
(如您所见,并非所有目录“文件夹”都有目录“备份”)
我需要检查“文件夹”中是否存在“备份”目录并将其删除。
我正在使用这个命令:
for d in /home/* ;
do [ -d "$d/backup" ]
&& echo "/backup exists in $d"
&& rm -rf "$d/backup"
&& echo "/backup deleted in $d" ;
done
但它不起作用。请帮忙。
find . -type d -name "backup" -delete -print
很明显,备份目录下的所有内容都会丢失。
这将递归到您的目录中。如果你需要限制在第一层,你可以这样做:
find . -maxdepth 1 -type d -name "backup" -delete -print
这两个命令都将打印已删除的目录。没有输出 == 没有找到目录,什么也没做。
最后,您要避免像您尝试的那样在文件或目录名称上循环,因为您的文件或目录名称中可能包含空格。此处提供完整的讨论和解决方案:https://mywiki.wooledge.org/BashFAQ/001