巨大なディレクトリから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
。