5

ディレクトリを再帰的に走査して特定のファイルを見つけてから、検索を停止し、ファイル名のパスを awk 関数などにパイプする方法を探しています。以前に同様の質問をしましたが、私のマシン以外のマシンでテストした後、locate誰もが自分のシステムでコマンドを使用しているわけではないため、コマンドが機能しないことがわかりました。

私がlocateで使用したコード:

dir="/path/to/destination/";
mkdir "$dir";
locate -l 1 target_file.txt | \
   awk -v dir="$dir" '{printf "cp \"%s\" \"%s\"\n", $1, dir}' | \
   sh
4

2 に答える 2

6

find(1)コマンドはそれを行います。1 行だけ取​​得するには、 を使用しますhead(1)

dir="/path/to/destination/";
mkdir "$dir";
find /path/location -name target_file.txt |
    head -n 1 |
    awk -v dir="$dir" '{printf "cp \"%s\" \"%s\"\n", $1, dir}' |
    sh
于 2012-12-19T08:39:00.423 に答える
1

ファイルが1つしか存在しないことがわかっている場合は、使用できます

find ./ -name "target_file.txt" -exec cp -r {} $dir \;

よくわからない場合は、 head を使用して 1 を制限し、 xargs を使用します

find ./ -name "target_file.txt" | head -1 | xargs -I {} cp -r {} $dir/

于 2012-12-19T08:59:02.050 に答える