我们如何在 Ubuntu 20.10 中同一目录下的每个文本文件的最后一行(内容)末尾添加星号(*)?

我们如何在 Ubuntu 20.10 中同一目录下的每个文本文件的最后一行(内容)末尾添加星号(*)?

我目录中有许多文本文件。我想在目录中每个扩展名为 .txt 的文本文件的最后一行(内容)末尾附加/添加 * 如何在 Ubuntu 20.10 中通过单个操作实现此目的?

我之所以问这个问题,是因为我目前正在处理 .txt 和 .pgn 文件。如果我必须将 .txt 转换为 .pgn 文件,那么最后一行末尾需要 *、1/2-1/2、1-0 或 0-1(向机器表示得分或游戏结束),否则我将无法将它们转换为 .pgn 文件。此外,即使我通过另存为将它们转换为 .pgn 文件,那么该文件在机器二进制文件中仍然是不完整的且不可读的。机器将无法将其识别为得分或结束。

答案1

这个应该能够对你的所有.txt文件执行此操作。

从所有 .txt 文件所在的当前文件夹运行:

find . -maxdepth 1 -iname "*.txt" -print0 | xargs -L1 -0 sed -i '$a*'

该命令将找到所有带有空格的文件,然后将空格附加*到该文件夹​​中找到的所有.txt 文件的最后一行。

希望这可以帮助!

答案2

这可以完成文件数量较少(约 1000 个文件):

echo "*" | tee -a *.txt >/dev/null

或者使用它大量文件

for f in *.txt
    do
    echo "*" >> "$f"
    done

从包含文件的目录运行上述命令.txt

答案3

您可以更进一步使用

    files

命令来帮助您确定哪些文件是 ASCII 文本。

为此,我在主目录中创建了一个名为 addstar.sh 的小 shell 脚本

    file $1 | grep ": ASCII text"  | sed "s/: ASCII text.*//g" |  echo "*" >> $1

与 find 命令结合使用,即可找到解决方案

    find  -maxdepth 1 -mindepth 1 -name "*.txt"  -exec  ~/addstar.sh {} \;

    

-maxdepth 和 -mindepth 参数将其保留在单个目录中。

问候,mondotofu

PS 别忘了

    chmod +x ~/addstar.sh

PPS 请记住,文本有很多种。以下是我主目录中文件的快速扫描。

$ file * | grep "text"
addstar.sh:                                                        ASCII text
agent-install.log:                                                 UTF-8 Unicode text, with CRLF, CR, LF line terminators, with escape sequences
cantcopy.log:                                                      UTF-8 Unicode text, with very long lines
conda_install_altair.log:                                          ASCII text
conda_install_altair.log2:                                         ASCII text
conda_install_altair.log2~:                                        ASCII text
conf.yaml:                                                         ASCII text
files.list:                                                        ASCII text
fun_reports.txt:                                                   ASCII text
release-notes.html:                                                HTML document, UTF-8 Unicode text
stacktrace_20200724-1656.txt:                                      ASCII text, with CRLF, LF line terminators
T480_config-backup.sh:                                             ASCII text

您可能需要调整一次性命令,其中我仅针对 ASCII 文本进行 grep,并查看是否需要调整它以输入其他类型的文本输出。

相关内容