Linux

將每個文本文件的名稱附加到文件的最後一行

  • March 14, 2022

我有十個文件:firstFile.txt,…,tenthFile.txt

在文件的最後一行,我想附加文件名。

即對於第一個,最後一行將是“firstFile”

我想在一行程式碼中執行此操作

bash-4.4$ touch firstFile.txt
bash-4.4$ touch secondfile.txt
bash-4.4$ ls * | while read fn ; do echo "$fn" >>"$fn" ; done
bash-4.4$ cat *
firstFile.txt
secondfile.txt

顯然,您可能需要更改*以適合您的特定情況。對於更複雜的情況,您可能需要考慮更改lsfor a 。find

編輯:如果要刪除“.txt”,請更改echo "$fn"echo "${fn%%.txt}"上面的行。

(我知道ls *這很奇怪,但星號在範例中充當位置標記)

使用,在每個非隱藏的正常文件(不是目錄、符號連結、管道、設備……)的末尾zsh添加一行文件名去掉其副檔名( oot 名稱):r

for f (*(N.)) print -r - $f:r >> $f

使用sh/ bash(也適用於zsh):

for f in *; do
 [ -f "$f" ] && [ ! -L "$f" ] && printf '%s\n' "${f%.*}" >> "$f"
done

請注意,這些循環的退出狀態將是在這些循環中執行的最後一個和/或列表的退出狀態。

為了使退出狀態僅在腳本無法更新文件時不成功,您可以這樣做:

#! /bin/zsh -
ret=0
for f (*(N.)) print -r - $f:r >> $f || ret=$?
exit $ret

或者:

#! /bin/sh -
ret=0
for f in *; do
 [ -f "$f" ] || continue
 [ -L "$f" ] && continue
 printf '%s\n' "${f%.*}" >> "$f" || ret="$?"
done
exit "$ret"

引用自:https://unix.stackexchange.com/questions/694317