파일의 마지막 줄에 각 텍스트 파일의 이름을 추가합니다.

파일의 마지막 줄에 각 텍스트 파일의 이름을 추가합니다.

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

관련 정보