2

現在、私は複数のディレクトリを持っています

Directory1 Directory2 Directory3 Directory4

これらの各ディレクトリにはファイルが含まれています(ファイルはやや不可解です)

私がやりたいのは、フォルダ内のファイルをスキャンして、特定のファイルが存在するかどうかを確認し、そのフォルダをそのままにしておく場合、特定のファイルが存在しない場合は、ディレクトリ全体を削除することです。これが私が意味することです:

.passという単語を含むファイルを検索しています。ファイル名に。ディレクトリ4に、探しているファイルがあると言う

Direcotry4:    
file1.temp.pass.exmpl
file1.temp.exmpl
file1.tmp

残りのディレクトリには、その特定のファイルがありません。

file.temp
file.exmp
file.tmp.other

だから私はDirectory1、2、3を削除したいのですが、Directory4だけを残します...

これまでのところ、私はこのコードを思いついた

(arrはすべてのディレクトリ名の配列です)

for x in ${arr[@]}
do
    find $x -type f ! -name "*pass*" -exec rd {} $x\;
done

私がこれを行うことを考えた別の方法は次のようなものです:

for x in ${arr[@]}
do

    cd $x find . -type f ! -name "*Pass*" | xargs -i rd {} $x/
done

これまでのところ、これらは機能していないようで、何か間違ったことをしてすべてのファイルを削除してしまうのではないかと心配しています.....(バックアップしました)

これを行う方法はありますか?Directory 4を変更せず、その中のすべてを保持したいことを忘れないでください

4

2 に答える 2

1

これを試して:

# arr is a array of all the directory names
for x in ${arr[@]}
do
ret=$(find "$x" -type f -name "*pass*" -exec echo "0" \;)
# expect zero length $ret value to remove directory
if [ -z "$ret" ]; then
    # remove dir
    rm -rf "$x"
fi
done
于 2011-07-22T07:25:05.057 に答える