파일의 모든 줄 끝에 파일 이름을 추가하는 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
로드 하려고 하면 누군가가 해당 디렉터리에 악성 코드를 심었을 수 있습니다. 시스템과 함께 제공되는 확장 프로그램 의 경로 는 다를 수 있습니다. 출력을 참조하세요.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
편집하려는 파일이 포함된 디렉터리로 바꾸세요 .