- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
看来我无法找到这个问题的直接答案。感谢您的帮助。
我正在尝试在目录中查找具有特定名称的所有文件,读取文件的最后 1000 行并将其复制到同一目录中的新文件中。例如:
Find all files names xyz.log in the current directory, copy the last 1000 lines to file abc.log (which doesn't exist).
我尝试使用以下命令但没有成功:
find . -name "xyz.log" -execdir tail -1000 {} > abc.log \;
我遇到的问题是,对于当前目录中的所有文件,它们都写入 CURRENT 目录中的 abc.log,而不是 xyz.log 所在的目录。很明显,首先执行带有 execdir 的查找,然后将输出重定向到 abc.log。
你们能建议一个解决这个问题的方法吗?我感谢任何信息/帮助。
编辑 - 我试过 find 。 -name "xyz.log"-execdir sh -c "tail -1000 {} > abc.log"\;
按照一些 friend 的建议,但它给了我这个错误: sh: 。/tail: No such file or directory
错误信息。你们知道问题出在哪里吗?
幸运的是,使用 -printf
的解决方案运行良好。
最佳答案
最简单的方法是这样的:
find . -name "xyz.log" -execdir sh -c 'tail -1000 "{}" >abc.log' \;
一个更灵活的选择是先打印出命令,然后用sh
执行它们:
find . -name "xyz.log" -printf 'tail -1000 "%p" >"%h/abc.log"\n' | sh
您可以删除| sh
在您尝试/调试时从最后开始。
有一个bug在某些版本的 findutils(4.2 和 4.3,虽然它在某些 4.2.x 和 4.3.x 版本中已修复)导致包含 {}
的 execdir 参数以 ./
(前缀不是仅应用于 {}
,而是应用于整个带引号的字符串)。要解决此问题,您可以使用:
find . -name "xyz.log" -execdir sh -c 'tail -1000 "$1" >abc.log' sh {} \;
sh -c 'script' arg0 arg1
运行 sh
script
并传递给它的 arg0、arg1 等。按照惯例,arg0 是可执行文件的名称(此处为“sh”)。从脚本中,您可以使用 $0
(对应于“sh”)、$1
(对应于 {}
的查找扩展)访问参数,等
关于linux - 在目录中查找文件,使用 execdir 执行命令并重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17243974/
好,你好我在命令行上使用了一些脚本来从.wav和.aif文件中提取mp3。最近,我一直在使用只需要mono WAV文件的采样器。等待-我保证这是一个编程问题。 我想运行一个命令,将目录中的所有wav文
看来我无法找到这个问题的直接答案。感谢您的帮助。 我正在尝试在目录中查找具有特定名称的所有文件,读取文件的最后 1000 行并将其复制到同一目录中的新文件中。例如: Find all files na
整个故事:我正在编写将所有文件从一个目录链接到另一个目录的脚本。新文件名将包含原始目录名。我用 find此时此刻与 -execdir选项。 这就是我想使用它的方式: ./linkPictures.sh
我想快速浏览根目录中各种子文件夹中的一堆文件以获取视频和音频格式类型。 我可以使用以下方法从单个文件中获取我需要的信息: ffprobe file.mp4 2>&1 >/dev/null | grep
find . -iname '*.rar' -execdir ls {} + 这在 OSX Lion 下不起作用,产生 ls: blabla.rar: No such file or director
我是一名优秀的程序员,十分优秀!