在bash循环中排除文件

hkn*_*nik 12 bash

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


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

Cor*_*ren 18

您可以添加这样的continue语句:

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

或者你可以用find命令来做到:

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


Kev*_*vin 7

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

for dir in !(dirname)/
...
Run Code Online (Sandbox Code Playgroud)