在 bash 循环中排除文件

在 bash 循环中排除文件

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


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

答案1

您可以添加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 {}" \;

答案2

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

for dir in !(dirname)/
...

相关内容