gpt4 book ai didi

linux - 在 Bash 中将一个目录中的所有文件连接成一个文件,按修改日期排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:47 25 4
gpt4 key购买 nike

我将数以千计的纯文本格式的文章移动到一个目录中。

在标题中,有些有空格,有些以 - 开头,有些有单引号/双引号,基本上所有其他有效的 Windows 和 Linux 文件名字符都在标题中。

内容文本包含 Windows 和 Linux 行结尾(对 - 这就是它们的名称?)。

在 Linux/Bash 中,如何将所有这些文件((一半是无扩展名,一半是 .txt's))连接到一个文件中,按修改日期排序,文件名和文件日期整齐地打印在每个文件的内容之前?

如果可以的话,请告诉我如何在嵌套文件结构中也做同样的事情,这次除了文件名和文件修改日期之外,还为每个文件打印文件路径。

我将不胜感激,这是我多年来的个人写作,现在我已经搜索和奋斗了几个小时。我是作家不是程序员 =)

感谢考虑。

最佳答案

如果你有一些 GNU 好东西和 dos2unix:

find -type f -printf "%T@ %p\0" | sort -nz | while IFS= read -r -d '' l; do f=${l#* }; printf '%s %s\n' "$(date -r "$f")" "$f"; dos2unix < "$f"; echo; done

应该完成这项工作,并且 100% 安全地处理您可能拥有的所有有趣的文件名。递归工作。很抱歉这么长的一行,但现在是 sleep 时间了!


编辑。关于你的 .fuse_hidden_​​blahblah 文件:我不知道为什么这个文件在这里,为什么一些内容被递归地添加到它自己。我相信您可以通过要求 find 明确忽略它来安全地忽略它:

find \! -name '.fuse_hidden*' -type f -printf "%T@ %p\0" | sort -nz | while IFS= read -r -d '' l; do f=${l#* }; printf '%s %s\n' "$(date -r "$f")" "$f"; dos2unix < "$f"; echo; done

顺便说一句,内容显示在终端屏幕上。如果你想将它重定向到文件 mycatedfile.txt,那么:

find \! -name 'mycatedfile.txt' \! -name '.fuse_hidden*' -type f -printf "%T@ %p\0" | sort -nz | while IFS= read -r -d '' l; do f=${l#* }; printf '%s %s\n' "$(date -r "$f")" "$f"; dos2unix < "$f"; echo; done > "mycatedfile.txt"

关于linux - 在 Bash 中将一个目录中的所有文件连接成一个文件,按修改日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28532317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com