2012-03-13 5 views
0

は、私がここにバッシュスクリプトOSXはそれが

#!/bin/bash 
find /Users/ -name "*.mov" -o -name "*.flv" -o -name "*.mp4" -o -name "*.avi" -o -name "*.wmv" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.wmv" -o -name "*.f4v" -o -name "*.m4v" -o -name "*.mxf" -o -name "*.ts" -type f -mtime +7 -exec rm -rf {} \; 

それは、7日以上経過したすべてのファイルを見つけ、それが正常に動作しますが、私はそれが結果を削除したい場合は、このbashスクリプトを持って検出されたファイルを削除することではありません私はそれがファイルのいずれかを削除しないことがわかったことを設定します。私が間違っていることはありますか?これはMac OSX 10.6にあります。

助けがあれば助かります。ありがとう!

+0

'-exec'と' rm'の間に 'echo'を挿入すると、期待するコマンドがリストされますか?もしそうなら、 'find'を使わずに直接コマンドを実行しようとするとどうなりますか? – ruakh

+0

findコマンドを実行すると、見つかると予想されるすべてのファイルが一覧表示されます。 – cohortq

答えて

1

-exec rm -rf {}\;の代わりに-deleteオプションを使用してください(ご使用のバージョンのfindコマンドで利用可能な場合)。これにより、削除しようとして失敗するたびにエラーメッセージが表示されます。それは何が起こっているの詳細情報を与えるかもしれない。

$ find . -name "*.foo" -type f -mtime +7 -delete 
find: -delete: unlink(./four.foo): Permission denied 
find: -delete: unlink(./one.foo): Permission denied 
find: -delete: unlink(./three.foo): Permission denied 
find: -delete: unlink(./two.foo): Permission denied 
find

いずれも削除/ rmコマンドからの実際の終了コードを返します。あなたに何が起こっているのより良い理解を与えるかもしれない

find . -name ... -type f -mtime +7 | while read file 
do 
    if rm -fr $file 
    then 
     echo "Successfully deleted $file" 
    else 
     echo "Error deleting file: Exit code $?" 
    fi 
done 

:あなたはこのような何かをしたいことがあります。

+0

これはあなたに感謝してくれました!! '#!/ bin/bash' ' find/Users/-name "* .mov" -o -name "* .mpg" -o -name "* .flv" -o -name "* .mp4" "* .avi" -o -name "* .wmv" -o -name "* .mpeg" -o -name "* .avi" -o -name "* .wmv" -o -name " * .f4v "-o -name" * .m4v "-o -name" * .mxf "-o -name" * .ts "-type f -mtime +7 |読みながらfile' は ' その後、 のrm -fr $ファイルが「ファイルの削除エラー?:終了コード$を」「に成功しました削除された$ファイル」 他 エコーをエコーありません fi done' – cohortq

+0

OSXのスケジュールでこれを実行させるために、私はcrontabを使うことができませんでした。このスケジューラープログラムをLingon – cohortq

0

おそらくあなたはsudoでコマンドを実行する必要がありますか?通常のユーザーとして、すべてのディレクトリに完全にアクセスすることはできません。

+0

パスワードを入力せずにsudoを実行するにはどうしたらいいですか? – cohortq

+0

ああ、私がこれをテストしたのは、私が行ったcronの仕事だった。crontab -e -u root – cohortq

+0

@cohortq: 'cron'が実行されないので、コマンドラインで実行されるコマンドとは動作が異なる場合が多いあなたのプロファイル設定スクリプト( '$ PATH'を設定するなど)。何が起きているのかを見るには、 'find'コマンドの直前に' exec >>/home/cohortq/whats-going-on.txt 2>&1'コマンドを追加してください。次に、 '/ home/cohortq/whats-going-on.txt'にエラー情報を追加します。 – ruakh

0

コマンドは/ usr/binにありますが、これはcronジョブのデフォルトのPATHにはありません。 /usr/bin/findとして実行するか、スクリプトの先頭にPATHを設定してください。