2011-08-08 5 views
0

私はアーカイブディレクトリに1日以上経過したファイルを移動するスクリプトを作成しようとしています。私は、次のfindのコマンドを使用:FIND以外でのmtimeの使用

for filename in `find /file_path/*.* -type f -mtime +1` 

私の引数リストがfindで扱うことには大きすぎるので、これが失敗しました。

/usr/bin/find: arg list too long 

それはIF-ELSE文でfindを使用することは可能です:私は次のエラーを得ましたか。誰かが、mtime以外の例をfindに提供することはできますか?

編集:検索の一部であるforループを追加します。あなたの元のコードは、それがファイル名にスペースをなどを取り扱う方法で許容できるものであった とfindの作用で移動を行うには賢明な方法が存在しないことを前提としてい

+0

その末尾のバックティックはコピー・ペーストの間違いですか?それがなければ、それは私のために働く。また、 '*。*'がなぜ*を使うのか? – tjameson

+0

findはforループの一部です。質問を編集しました。 – visakh

+0

@tjameson:ドットを含まない名前を避けるために '' *。* ''を使います。 –

答えて

2
find /file_path -name '*.*' -mtime +1 -type f | 
while read filename 
do ...move operation... 
done 

。また、重複した引数リストの問題も回避します。

+0

私はどこでもそれを使用します。 – tjameson

+0

返信いただきありがとうございます。引数リストに長いエラーがありません...しかし、サブディレクトリ内のすべてのファイルを読み込んでいるようです。私のfile_pathは/ jobs/20110808/logsですが、ジョブから読み込んでいます/ 20110807、jobs/20110809など。深みを追加する必要がありますか? – visakh

+0

@ user295338:検索したい場合は、 '/ jobs/20110808/logs'を指定してください。 'find'はあなたが見るように求める場所の下を見ます。 –

2

なぜ、findの-exec部分を使用しないのですか?あなただけのファイルをCPにしたい場合は

1

、あなたが使用することができ

検索/ file_pathで-name -mtime +1型F "。" | xargs -i mv {}/usr/local/archived

関連する問題