在bash循环中排除文件


10

在以下脚本中,如何在循环中排除目录?我要这样做是因为所有文件都是指向此目录的符号链接,该目录位于同一级别,因此我不想添加它。


cd /var/www
for dir in */
do
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

Answers:


13

您可以添加如下continue语句:

cd /var/www
for dir in */
do
        if [ "$dir" == "foo" ] ; then
              continue;
        fi
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

或者,您可以使用以下find命令执行此操作:

find /var/www -maxdepth 1 -type d \( -name foo \) -prune -o -print -exec bash -c "tar -czfh \`basename {}\`.tar.gz {}" \;

7

extglob如果尚未启用(shopt -s extglob),则需要为此启用:

for dir in !(dirname)/
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.