5

我正在寻找一种递归遍历目录以查找特定文件的方法,然后停止搜索并将文件名路径传递给 awk 函数或类似的东西。我之前问过一个类似的问题,但是在我以外的机器上进行测试后发现该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)命令将执行此操作。要只获得一条线,请使用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

如果您知道只有一个文件存在,那么您可以使用

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 回答