linux - 对目录中的文件进行排序,然后打印内容

标签 linux bash shell cat

我需要编写一个脚本来按名称中第一个“0”后面的字符对文件名进行排序。所有文件名至少包含一个0。 然后脚本应按该顺序打印每个文件的内容。

我知道我需要使用排序和猫。但我无法弄清楚是什么类型。这是我目前所掌握的。

<小时/>
#!/bin/bash

dir=$(pwd)


for n in $dir `ls | sort -u `  ; do

    cat $n
done;

最佳答案

假设

  1. 第一个零可以是文件名中的任何位置,
  2. 零后可能有多个同名文件,
  3. 您希望能够处理任何文件名,包括点文件和包含换行符的名称,并且
  4. 您已安装 GNU CoreUtils(常见发行版的标准配置),

你需要做一些像这样疯狂的事情(未经测试):

find . -mindepth 1 -maxdepth 1 -exec printf '%s\0' {} + | while IFS= read -r -d ''
do
    printf '%s\0' "${REPLY#*0}"
done | sort --unique --zero-terminated | while IFS= read -r -d ''
do
    for file in ./*"$REPLY"
    do
        […]
    done
done

说明:

  1. 打印所有以 NUL 分隔的文件名并将其读回,以便能够对它们进行变量替换。
  2. 删除文件名中直到第一个零(包括第一个零)的所有内容并打印出来。
  3. 按文件名的其余部分排序,确保每个唯一后缀仅打印一次。
  4. 处理以(现已排序)后缀结尾的每个文件。

关于linux - 对目录中的文件进行排序,然后打印内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240555/

相关文章:

linux - 为什么 wc 在我的文件中计算一个额外的字符?

php - 尝试在 PHP/Apache 中执行 exec ("unix2dos xxx"时出现问题

shell - 在 ksh ENV 脚本中检测交互式 shell

linux - 来自 C++ 程序的 ntpstat

linux - 如何在 Ubuntu 上使用 Mongodb 27017 端口

linux - 捕获信号时如何正确等待 bash 子进程完成

bash - Fedora 容器 No 'find' 命令可用

excel - Office 2011 for Mac 中的 VBA Shell 函数

linux - GNU C交叉编译器: Cannot execute binary file

linux - 在所有远程和本地 GIT 分支中查找特定文件夹