ファイルの最後の行に各テキストファイルの名前を追加します。

ファイルの最後の行に各テキストファイルの名前を追加します。

firstFile.txt、...、tenthFile.txtという10個のファイルがあります。

ファイルの最後の行にファイル名を追加したいと思います。

つまり、最初の行の場合、最後の行は "firstFile"になります。

コード一行でこれを行いたいです。

答え1

を使用して、zsh拡張子(root名)からファイル名を削除した行を非表示の各ファイルの末尾に追加します。定期的なファイル(ディレクトリ、シンボリックリンク、パイプ、デバイスなどではありません):

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"

答え2

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より複雑な場合はfind

編集:「.txt」を削除するには、上の行にecho "$fn"変更します。echo "${fn%%.txt}"

(奇妙なことはわかりますが、ls *アスタリスクは例の位置表示として機能します。)

関連情報