2016-11-29 28 views
-1

私のソースの場所にあるファイルが日付範囲内にあるかどうかを確認したい場合は、yesの場合はスキップして次のファイルをチェックしてください。 シェルスクリプトの初心者で、これをどうやってやることができますか?ファイルが存在する場合はコピーしてください。bashにスキップしてください

+0

私はあなたのスクリプトを理解していません。検索する-newrmtパラメータは何ですか?ファイル名の日付が最後の更新日を検索していますか? – Derlin

+0

@Derlin、それはGNU拡張です。 manページで '-newerXY'を確認してください。 –

+1

'find'は存在しないファイルが見つからないことに注意してください。ファイルのみが見つかるように '-type f'を追加してディレクトリ(etc)を除外することができます。見積もりの​​あなたの記法は間違っています。 'for'表記を使用するのは、ファイル名に空白(またはタブや改行)が含まれていない場合のみです。変数の使用を引用することを忘れないでください。日付変数の前に '$'を付けることを忘れないでください。一般に、あなたのコードが少し動くならあなたは最高の反応を得ます - あなたは実行されません(構文が無効です)。 –

答えて

2

findすでに存在するエントリのみが返されます。そこには問題はありませんが、結果を反復するために使用しているコードはひどく壊れています。


ここで問題となるのは、スキップするのではなく、一般的な正しい構文で、正確に関連する方法で(二次的に)問題があります。元のコードで最も直ちにバグを修正したとしても、BashPitfalls #1DontReadLinesWithForに落ちてしまいます。

findを使用する場合のベストプラクティスの詳細については、UsingFindを参照してください。それは言った、正しいアプローチの一つです:

#!/bin/bash 
#  ^^^- important: not /bin/sh 

while IFS= read -r -d '' filename; do 
    mv "$filename" /to_path 
done < <(find filedirectory_path/ -type f -newermt "$date1" ! -newermt "$date2" -print0) 

...か...

find filedirectory_path/ -type f -newermt "$date1" ! -newermt "$date2" -exec mv '{}' /to_path \; 
+0

ありがとうございますが、私が共有しているコードは、私が何をする必要があるのか​​を示すだけのものです。私はスクリプト作成でかなり悪いです。 – Ray

+2

@レイ:「私が何をする必要があるかの写真を私たちに見せてはいけません。あなたがしなければならないことを真剣に試みるコードを表示する。あなたがあなたの質問に答えようと努力しているなら、少なくともあなたはまともなコードを提示するために努力してください。そうでなければ本当に失礼です。 –

+0

私は無礼になるつもりはありませんでした。私はシェルスクリプトで文法的に正しいコードを書いてもあまりにも悪いと思う:( – Ray

関連する問題