Linux
將每個文本文件的名稱附加到文件的最後一行
我有十個文件: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
顯然,您可能需要更改
*
以適合您的特定情況。對於更複雜的情況,您可能需要考慮更改ls
for 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"