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

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

파일의 모든 줄 끝에 파일 이름을 추가하는 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

그리고 perl그리고find

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추가 한다는 점을 지적한 @thiagowfx에게 감사드립니다../foo/file2.txt

./등 을 추가하지 않고 파일 이름만 추가하려면 이 옵션을 사용합니다.

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 inplace현재 작업 디렉터리(as or)에서 확장 기능을 먼저 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편집하려는 파일이 포함된 디렉터리로 바꾸세요 .

관련 정보