スクリプトで機能しないxargsを使用して検索とコピー

スクリプトで機能しないxargsを使用して検索とコピー

巨大なディレクトリから3つのファイルを見つけて別のディレクトリにコピーする必要があります。

これが私がしたことです:

find $adir -type f \( -name "a1*" -o -name "a2*" -o -name "a3*" \) -mtime -8 | xargs cp -t $bdir

ファイルはa1ターゲットの場所にコピーされますが、他のファイルはターゲットの場所にコピーされません。これは私のスクリプトです。

#!/bin/bash
date=$(date)
day=$(date +"%u")
adir=/x/y
bdir=/a/b
 {
      if [ "$day" == "5" ] ; then
         find $adir -type f \( -name "a1*" -o -name "a2*" -o -name "a3*" \) -mtime -8 | xargs cp -t $bdir
       else
           echo "failed"
       fi
    }

スクリプトで実行しましたが、カーソルは端末に返されません。動作させる方法はありますか?

ベストアンサー1

括弧を削除してみてください。このコマンドはターミナルとbashシェルで直接動作しました(動作していることを確認するには、cpを「file」に変更してください。)。

 find . -type f -name "a4*" -o -name "d1*" -o -name "f2*" -mtime -8 | xargs file

また、タスクを実行するためのより多くのスペース(ループ)を提供できるforループを試すこともできます。find行の変更

for a_file in `find $adir -type f \( -name "a1*" -o -name "a2*" -o -name "a3*" \) -mtime -8`
do
   cp -t $a_file $bdir
done

削除し-mtime -8て変更してcp -t $a $bdirテストできますecho "The file is: " $a_file

おすすめ記事