我在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 实际不存在的内容,这是它应该做的,但仍然令人沮丧。
希望这对某人有帮助!