【问题标题】:find command to find files and concatenate themfind 命令查找文件并将它们连接起来
【发布时间】:2014-09-24 20:10:16
【问题描述】:

我正在尝试查找 *.gz 类型的所有文件并将它们归类到 total.gz,我认为我对此非常接近。

这是我用来列出所有 *.gz 的命令

找到/home/downloaded/。 -maxdepth 3 -type d ( ! -name . ) -exec bash -c "ls -ltr '{}' " \

如何修改它,以便将它们连接起来并写入 ~/total.gz

更新: 下载的目录结构如下

/downloaded/wllogs/303/07252014/SysteOut.gz
/downloaded/wllogs/301/07252014/SystemOut_13.gz
/downloaded/wllogs/302/07252014/SystemOut_14.gz

【问题讨论】:

  • 您的find 调用似乎有点复杂。 find /home/downloaded/. -maxdepth 3 -type f -name "*.gz" -print0 | xargs -0 cat > total.gz 不是更好的方法吗? (或者,假设 GNU find : find /home/downloaded/. -maxdepth 3 -type f -name "*.gz" -exec cat {} + > total.gz
  • 是的,你是对的。这个发现是我的代码中的 sn-p,我试图修改以完成这项任务。顺便说一句,“+”是什么意思
  • + 是一个 GNU find 扩展,允许它使用多个参数 -exec 给定命令,而不是使用 -exec cat {} \; 获得的一次一个命令.

标签: linux bash find cat


【解决方案1】:

-exec 中使用cat 并重定向find 的输出:

find /home/downloaded/ -type f -name '*.gz' -exec cat {} \; > output

【讨论】:

  • 它不起作用,它说下载/./wllogs/301/07172014:是一个目录。我错过了什么吗?
  • 我希望-type f(没有意识到你使用了-type d)
  • 我尝试使用 f 但输出文件大小为零。所以它也不起作用。
  • 这次也不走运。只是一个观察 - 当我尝试使用 -type d 和 ls 命令时,它确实显示了所有目录和文件。和类型 f 什么都没有出现
  • @ hek2mgl :太棒了,我尝试使用 maxdepth 4,它确实显示了文件。有效 !谢谢你的时间
【解决方案2】:

-exec 中使用echo 并重定向输出:

find /home/downloaded/ -name "*.gz" -exec echo {} \; > output 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多