firstFile.txt、...、tenthFile.txtという10個のファイルがあります。
ファイルの最後の行にファイル名を追加したいと思います。
つまり、最初の行の場合、最後の行は "firstFile"になります。
コード一行でこれを行いたいです。
答え1
を使用して、zsh
拡張子(r
oot名)からファイル名を削除した行を非表示の各ファイルの末尾に追加します。定期的なファイル(ディレクトリ、シンボリックリンク、パイプ、デバイスなどではありません):
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 *
アスタリスクは例の位置表示として機能します。)