2012-01-02 11 views
4

私が作業しているスクリプトでは、rm -rfにフォルダ階層を設定します。しかし、その前に、プロセスが正常に完了することを確認したい。 (など、信頼性の高い、より短く、より読みやすい)よりよい解決策があるかもしれないならば今、私は思ったんだけどフォルダ階層の削除/書き込み権限を正しく確認するにはどうすればよいですか?

#!/bin/bash 
set -o nounset 
set -o errexit 

BASE=$1 
# Check if we can delete the target base folder 
echo -n "Testing write permissions in $BASE..." 
if ! find $BASE \(-exec test -w {} \; -o \(-exec echo {} \; -quit \) \) | xargs -I {} bash -c "if [ -n "{}" ]; then echo Failed\!; echo {} is not writable\!; exit 1; fi"; then 
    exit 1 
fi 
echo "Succeeded" 

rm -rf $BASE 

:だから、これは私が思い付いたアプローチです。

私は、チェックと実際の削除の間にファイルアクセス許可が変更される可能性があることを十分に認識しています。私のユースケースでは、それは受け入れられます(何もチェックしないのと比較して)。しかし、これを避ける方法があった場合、私はどのように知りたいです。

答えて

6

-permスイッチがfind(ご使用のバージョンに存在する場合)のことを知っていますか?

find -perm -u+w 
+0

いいえ、私はありませんでした。ヒントをありがとう。私はそれを考慮に入れます。 –

+0

わかりました。どのようにしてテストを正しく逆転させることができますか?あなたの例は、私が書き込み権限を持っているすべてのファイルを一覧表示します。書き込みアクセス権のないファイルをすべて一覧表示するにはどうすればよいですか?私はそれを働かせることはできません。 'find。 ! -perm -u + w'は何も表示しませんが、私のオリジナルの方法ではたくさんのファイルがリストされています。 –

+0

ちょうど '! -perm/u + w' – fge

関連する問題