我需要编写一个脚本来按名称中第一个“0”后面的字符对文件名进行排序。所有文件名至少包含一个0。 然后脚本应按该顺序打印每个文件的内容。
我知道我需要使用排序和猫。但我无法弄清楚是什么类型。这是我目前所掌握的。
<小时/>#!/bin/bash
dir=$(pwd)
for n in $dir `ls | sort -u ` ; do
cat $n
done;
最佳答案
假设
- 第一个零可以是文件名中的任何位置,
- 零后可能有多个同名文件,
- 您希望能够处理任何文件名,包括点文件和包含换行符的名称,并且
- 您已安装 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
说明:
- 打印所有以 NUL 分隔的文件名并将其读回,以便能够对它们进行变量替换。
- 删除文件名中直到第一个零(包括第一个零)的所有内容并打印出来。
- 按文件名的其余部分排序,确保每个唯一后缀仅打印一次。
- 处理以(现已排序)后缀结尾的每个文件。
关于linux - 对目录中的文件进行排序,然后打印内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240555/