找到一个特定的文件然后管道到stdout / awk

时间:2012-12-19 08:35:10

标签: bash find stdout

我正在寻找一种递归遍历目录以查找特定文件的方法,然后停止搜索并将文件名路径传递给awk函数或类似的东西。 I asked a question earlier that was similar,但是在我以外的机器上进行测试后发现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

2 个答案:

答案 0 :(得分:6)

find(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

答案 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/