bashループでファイルを除外する


10

次のスクリプトでは、ループ内のディレクトリをどのように除外しますか?これは、すべてのファイルが同じレベルにあるこのディレクトリを指すシンボリックリンクであるため、追加したくないので、これを実行します。


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

回答:


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)/
...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.