모든 줄 끝에 파일 이름을 추가하는 방법 - 모든 하위 디렉터리의 모든 파일

모든 줄 끝에 파일 이름을 추가하는 방법 - 모든 하위 디렉터리의 모든 파일

파일의 모든 줄 끝에 파일 이름을 추가하기 위해 bash 스크립트(ubuntu 16)에 줄을 추가하고 싶습니다. 즉, 폴더의 모든 파일과 모든 하위 폴더의 모든 파일입니다.

파일 이름은 -_와 같은 특수 문자가 포함된 영숫자입니다.

예를 들어:

이전 파일의 줄 filename_ghrut.txt:

blah blah blah
blahblah blahblah

파일의 filename_ghrut.txt다음 라인:

blah blah blah filename_ghrut.txt
blahblah blahblah filename_ghrut.txt

주변을 검색했지만 대부분의 명령이 작동하지 않는 것 같습니다.

특정 디렉터리의 모든 하위 폴더에 있는 모든 파일에 대해 이 작업을 실행하고 싶습니다.

큰 감사를 드린다.

이것을 찾았지만 제대로 작동하지 않습니다.

ls file{1..5}.txt|xargs -I% sed -i 's/$/;%/' %

답변1

perlfind

find . -type f -exec perl -i -pe 's/$/ $ARGV/' {} +
  • s/$/ $ARGV/각 줄 끝에 공백과 파일 이름을 추가하십시오.
  • -i내부 편집의 경우 i.bkp원본 파일의 백업을 유지하려는 경우 사용
  • find지원하지 않는 경우 대신 +사용하세요.\;
  • find . -type f현재 디렉토리의 모든 파일 목록을 제공합니다
  • -exec명령을 사용하여 모든 파일에 대해 작업을 수행할 수 있습니다.
  • find . -type f -name '*.txt'다음으로 끝나는 파일만 제한하려는 경우에 사용하세요 ..txt


./file.txt위의 솔루션이 파일 이름을 , ./foo/file2.txt등 으로 추가한다는 점을 지적해 주신 @thiagowfx에게 감사드립니다.

./기타 등등 없이 파일 이름만 추가하려면 이것을 사용하십시오.

find . -type f -exec perl -i -pe 's/$/$ARGV=~s|.*\/| |r/e' {} +
  • $ARGV=~s|.*\/| |r/제거된 모든 문자가 포함된 파일 이름을 제공합니다.

답변2

GNU를 사용하면 awk:

LC_ALL=C find . -type f -exec gawk -i /usr/share/awk/inplace.awk '
  BEGINFILE {suffix = FILENAME; sub(/.*\//, "", suffix)}
  {print $0, suffix}' {} +

동일한 파일에 여러 개의 하드 링크가 있는 경우 각각의 이름이 해당 파일의 각 줄에 (특정 순서 없이) 추가된다는 점에 유의하십시오.

어쨌든,사용하지 마세요-i inplaceas 는 누군가 악성 코드를 심었을 수 있는 현재 작업 디렉터리에서 확장명(as 또는 )을 먼저 gawk로드하려고 시도합니다 . 와 함께 제공되는 확장 프로그램 의 경로는 시스템에 따라 다를 수 있습니다.inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

답변3

find다음을 사용 하여 시도해 보세요 sed.

find /path/to/top_directory -type f -execdir sed -i -e "s/$/ {}/" {} \;

/path/to/top_directory편집하려는 파일이 있는 디렉토리로 바꾸십시오 .

관련 정보