
파일의 모든 줄 끝에 파일 이름을 추가하기 위해 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
위의 솔루션이 파일 이름을 , ./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 inplace
as 는 누군가 악성 코드를 심었을 수 있는 현재 작업 디렉터리에서 확장명(as 또는 )을 먼저 gawk
로드하려고 시도합니다 . 와 함께 제공되는 확장 프로그램 의 경로는 시스템에 따라 다를 수 있습니다.inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'
답변3
find
다음을 사용 하여 시도해 보세요 sed
.
find /path/to/top_directory -type f -execdir sed -i -e "s/$/ {}/" {} \;
/path/to/top_directory
편집하려는 파일이 있는 디렉토리로 바꾸십시오 .