find -execを使用してファイルをサブディレクトリにコピーします。

find -execを使用してファイルをサブディレクトリにコピーします。

.pngこのコマンドが17ファイルを現在のディレクトリ内のサブディレクトリにコピーしていないのはなぜですか?

$ find . -maxdepth 1 -mtime -3 | wc -l
17
$ find . -maxdepth 1 -mtime -3 -print0 | grep -z loader | xargs -r0 cp -t ./user_name_tutorial/
$ find . -maxdepth 1 -mtime -3 -print0
../Plugins.png./Screenshot from 2015-08-06 22:30:56.png./Screenshot from 2015-08-06 22:28:21.png./Plugins_ex-in-post.png./Screenshot from 2015-08-06 22:31:14.png./Pages_visit_site.png./user_name_tutorial./Page_edit.png./Screenshot from 2015-08-06 22:28:52.png./Page_edit-visual.png./Plugins-google-maps_v2-example.png./Screenshot from 2015-08-06 22:29:27.png./Plugin_google_apps.png./Screenshot from 2015-08-06 22:30:44.png./Media_uploads.png./Plugins_add_new.pnguser_name@COMP_NAME-X:~/Pictures$ 

答え1

あなたは私たちに結果を示しました

find . -maxdepth 1 -mtime -3 -print0

の出力は何ですか

find . -maxdepth 1 -mtime -3 -print0 | grep -z loader

loader 表示された出力にその単語を含むファイル名は表示されません。の出力grep(つまり、の入力xargs)に何も含まれていないと、当然何もコピーされません。


返品、

  • find … | grep foofind … -name "*foo*"代わりにプロセスを話して保存できます。
    とは別に:

    -maxdepth 1(ご存知のように)現在のディレクトリに検索を制限するを使用していることが確認されました。そのエントリがない場合は、findサブディレクトリを見つけてfind … | grep foo次の情報を提供します。みんなfood_fight次にかかわらず、名前が、またはであるサブディレクトリfootballのファイルpound_foolish記録したもの名前、その後grep全体(.-relative) ファイル名だけでなくパス名です。

  • -maxdepth 1find現在のディレクトリ内のサブディレクトリ名の報告を防ぎません。したがって、名前がloader(または)のサブother_loader_filesディレクトリがある場合その名前に渡されますcp。これはあなたが言わなかったのでエラーメッセージを表示するだけですcp -r。しかし、気をつけて不快なことをすることができる同様の状況があるかもしれません。
  • と言うことで、上記の(潜在的な)問題を回避できます-type f
  • -mtime -3ご存知のように、編集日に基づいて検索を制限することを使用していることがわかります。-mtime -3または、同じ検索制限テストを使用しない場合、ワイルドカード(しばしば「glob」またはファイル名拡張パターンと呼ばれる)を-type f使用することは、find … -maxdepth 1次のワイルドカードを使用するのとほぼ同じです。

    cp -t ./user_name_tutorial/ *loader*
    

    または

    cp *loader* ./user_name_tutorial/
    

関連情報