파일 이름을 찾아 바꾸기

파일 이름을 찾아 바꾸기

텍스트가 포함된 파일이 많이 있습니다. 모든 파일에는 "replace"라는 단어가 포함되어 있습니다(따옴표 제외). 단어를 파일 이름으로 바꾸고 싶습니다.

예를 들어 파일 이름은 On Time.txt입니다.

"replace"(따옴표 제외)라는 단어를 "on time"(따옴표 제외)으로 바꾸세요.

답변1

이 작업을 수행하려면 sed를 사용합니다.

for f in *.txt
do
    fullfile="$f"

    # filename without path (on_time.txt)
    filename=$(basename "$fullfile")

    # remove extension of filename (on_time)
    filename_woext="${filename%.*}"

    # replace all occurrences of "replace" with "on_time" in file
    sed -i -e "s/replace/$filename_woext/g" $filename

done

답변2

ZSH에서는 다음과 같이 간단합니다.

$ for f in *.txt; do filename=`echo ${f:r}`; sed -i -e "s/replace/$filename/" $f; done

답변3

find . -name "*" -type f | xargs sed -i -e "s/replace/On\ Time/g"

이는 필요에 따라 현재 디렉터리(및 하위 디렉터리) 아래의 "모든" 텍스트 파일을 대체합니다.

하위 디렉터리가 아닌 현재 디렉터리에만 있기를 원하는 경우.

find . -name "*" -type f -maxdepth 1 | xargs sed -i -e "s/replace/On\ Time/g"

현재 디렉토리가 아닌 다른 디렉토리로 교체하려는 경우.

find /path/do/dir -name "*" -type f | xargs sed -i -e "s/replace/On\ Time/g"

zsh 쉘에서 나를 위해 일했습니다. 다른 모든 작업도 수행해야 합니다.

답변4

for filename in "On time.txt" ; do
  replacement=$(echo $filename | sed -e 's,^.*/,,' -e 's,\.[^\.]*$,,')
  [ -f "$filename" ] && sed -i "s,replace,$replacement," "$filename"
done

디렉토리의 모든 파일을 실행하려면 아래와 같이 "On time.txt"를 *로 바꾸십시오.

for filename in * ; do

여기의 파일 이름에는 쉼표가 포함되어서는 안 됩니다(파일 이름에 표시되지 않도록 이 문자를 선택할 수 있음).

관련 정보