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 *
별표는 예제에서 위치 표시 역할을 합니다.)