【问题标题】:Unix Directory IssueUnix目录问题
【发布时间】:2016-03-28 08:37:45
【问题描述】:

我有多个文件夹,例如,

Folder_1
     sub_folder_1----->1.txt,2.txt,3.txt
     sub_folder_2----->2.txt,5,txt,6.txt
     sub_folder_3----->1.txt,2.txt,3.txt
     sub_folder_4----->1.txt,2.txt,3.txt
     sub_folder_5----->1.txt,2.txt,3.txt


Folder_2
     sub_folder_1----->1.txt,2.txt,3.txt
     sub_folder_2----->1.txt,2.txt,3.txt
     sub_folder_3----->1.txt,2.txt,3.txt
     sub_folder_4----->1.txt,2.txt,3.txt
     sub_folder_5----->1.txt,2.txt,3.txt

..........

每个sub_folders_* 里面都有很多files(.txt),我需要cat 并将所有sub_folders 中的所有文件合并到one unique file 中。

我尝试使用find /home/Arun/Labs/Master -maxdepth 2 -type f -exec cat {} \;

但无法实现。

请对如何执行此操作有任何建议?

【问题讨论】:

  • 您的folder_xsub_folder_y 是否有您需要寻找的模式(命名约定)?还是您只是想递归地“遍历”所有文件夹以生成唯一文件?
  • 是的@srj!我的文件夹的命名约定将是 exit-list-someyear-somenumber 并且该文件夹将包含文件夹名称为 (/01 /02 /03 ....... ) 的子文件夹,并且每个文件夹都有很多文件.
  • 您的find 命令有什么问题?

标签: shell unix grep cat


【解决方案1】:
cat Folder_*/*/*.txt > new_file.txt

如果你不知道你的目录树有多深:

shopt -s globstar
cat **/*.txt > new_file.txt

来自man bash

globstar:如果设置,路径名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 /,则只有目录和子目录匹配。

【讨论】:

  • 非常感谢!效果非常好!但是由于我的文件存储库太大,需要大量时间来渲染!
【解决方案2】:

这个findxargs 应该处理这个问题:

find /home/Arun/Labs/Master -maxdepth 2 -name '*.txt' -print0 | xargs -0 cat > /tmp/output.txt

【讨论】:

    【解决方案3】:

    如果文件夹中不涉及复杂结构,您可以简单地使用带有 2 个 for 循环的 shell 脚本来实现此目的

    假设:结构与问题中给出的完全相同,只有一级目录,所有数据都在.txt文件中

    #read_recursive.sh
    for foldr in *
        do
          cd foldr
          for subf in *
          do
            cat *.txt
          done
          cd ..
        done
    
    $ sh read_recursive.sh | uniq > final_output.txt
    

    【讨论】:

    • 不,don't parse ls 反正这里是useless
    • @tripleee,感谢您的信息,将代码更改为使用 glob,arun,您需要退出 CD 进入的目录,也进行了更改
    • 如果其中一个目录是指向其真正父目录在其他地方的目录的符号链接,或者(不太重要,但令人讨厌)如果 glob 扩展到目录以外的其他目录,这仍然是错误的.
    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多