linux下如何结合find和cp复制特定文件

linux下如何结合find和cp复制特定文件

我在linux下遇到以下问题:

我需要从目录中查找特定文件并将这些文件(如果存在)复制到另一个目录中

这是命令(我需要找到以单词 log 开头的特定文本文件)并且只获取最后 10 个最近的文件;该命令有效

find /mydir -type f -name 'log*.txt' | tail -n 10

不涉及递归,我只需找到文件并复制它们

但是我在将其与复制命令结合使用时遇到问题;我试过这个:

find /mydir -type f -name 'log*.txt' | tail -n 10 -exec cp --parents \{\} /tmp/mydir \;

它无法执行 -exec ,这里出了问题。

谢谢

答案1

我会用来xargs复制所有文件。

您可以将输出通过管道传输到 xargs,该 xargscp对所有传递的参数执行。这维基百科文章描述xargs得比我更好,你可以查看 Linux 的联机帮助页。

执行您想要的操作的调用可能是:

find /mydir -type f -name 'log*.txt' | tail -n 10 | xargs -I % cp % /tmp/mydir/

-I后面的标志意味着所有% cp %传递的参数将连接到最后一个%

答案2

在脚本中使用变量的更多用例解决方案:

#!/bin/bash
path1=/mydir
path2=/tmp/mydir
filetype=log*.txt
find_file="$(find $path1 -type f -name "$filetype" -printf "%f\n" | tail -n 10)"
for f in $find_file
do
    cp $f $path2
done

我花了近 2 天的时间为我的用例重写​​ cp 命令,尝试实现 find、grep、awk、xargs、循环等,然后再尝试 cp 变量。你瞧,它成功了。我的主要突破点是我的 find 命令替换将所有文件名存储到 $find_file 中,并尝试 cp 实际不存在的内容,这是它应该做的,但仍然令人沮丧。

希望这对某人有帮助!

相关内容