UFO ET IT

여러 파일의 확장자 이름을 변경하려면 어떻게 해야 합니까?

ufoet 2023. 4. 8. 14:22
반응형

여러 파일의 확장자 이름을 변경하려면 어떻게 해야 합니까?

것이 있습니다.*.html 파일 files files files files files files files files files files files files files files files files files files 로 바꾸고 싶습니다.*.txt

내가 어떻게 그럴 수 있을까?저는 배쉬 쉘을 사용합니다.

bash를 사용하는 경우 sed, basename, rename, expr 등의 외부 명령어가 필요하지 않습니다.

for file in *.html
do
  mv "$file" "${file%.html}.txt"
done

보다 나은 솔루션(외부 콜이 아닌 bash 기능만 있는 경우)에 대해서는, 그 외의 몇개의 회답을 참조해 주세요.


이을 사용할 수 있고 .rename프로그램(시스템에 있는 경우가 대부분이지만):

for file in *.html; do
    mv "$file" "$(basename "$file" .html).txt"
done

편집: 코멘트에 기재되어 있듯이, 적절한 따옴표(상기 추가)가 없는 파일명에는 사용할 수 없습니다.파일명에 공백이 없는 것을 알고 있는 자신의 파일에 대해서만 작업하는 경우, 이것은 동작합니다.다만, 나중에 재사용할 가능성이 있는 것을 쓸 때는, 반드시 적절한 따옴표를 빠뜨리지 말아 주세요.

rename 's/\.html$/\.txt/' *.html

네가 원하는 대로 할 수 있어요.

이것은 OSX에서 .txt에서 .txt_bak로 동작했습니다.

find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;

다음을 사용하는 경우:

rename -S <old_extension> <new_extension> <files>

rename -S .html .txt *.html

가 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.확장기능이.html로로 합니다..txt하는 모든 *.html.

주의: Greg Hewgill은 이것이 bash 빌트인이 아니며 별도의 Linux 명령이라고 올바르게 지적했습니다.Linux 상에서 필요한 것만 있으면 문제없이 동작합니다.더 많은 크로스 플랫폼이 필요한 경우 다른 답변 중 하나를 참조하십시오.

Mac에서는...

  1. 설치하지 않은 경우 이름 변경:brew install rename
  2. rename -S .html .txt *.html

Ubuntu 사용자의 경우:

rename 's/\.html$/\.txt/' *.html

OSX나 Linux에서 동작하는 솔루션 중 가장 슬릭하고 git에서도 동작합니다!

find . -name "*.js" -exec bash -c 'mv "$1" "${1%.js}".tsx' - '{}' \;

및 git:

find . -name "*.js" -exec bash -c 'git mv "$1" "${1%.js}".tsx' - '{}' \;

이 질문에서는 Bash를 명시적으로 언급하고 있습니다만, ZSH를 사용할 수 있는 경우는 매우 간단합니다.

zmv '(*).*' '$1.txt'

zsh: command not found: zmv실행만 하면 됩니다.

autoload -U zmv

그리고 다시 시도하세요.

zmv에 대한 힌트에 대한 이 오리지널 기사 덕분입니다.

rename 명령어의 예를 다음에 나타냅니다.

rename -n ’s/\.htm$/\.html/’ *.htm

-n은 테스트 실행이며 실제로 파일을 변경하지 않음을 의미합니다.n을 삭제했을 경우에 이름이 변경되는 파일의 리스트가 표시됩니다.위의 경우 현재 디렉토리의 모든 파일을 .htm 파일 확장자에서 .html로 변환합니다.

위의 테스트 실행 결과가 정상일 경우 최종 버전을 실행할 수 있습니다.

rename -v ’s/\.htm$/\.html/’ *.htm

-v는 옵션이지만 다음 출력 예시와 같이 rename 명령에 의해 변경된 유일한 레코드이기 때문에 포함시키는 것이 좋습니다.

$ rename -v 's/\.htm$/\.html/' *.htm
3.htm renamed as 3.html
4.htm renamed as 4.html
5.htm renamed as 5.html

중간에서 어려운 부분은 다음과 같이 정규 표현에 의한 Perl 대체입니다.

rename -v ’s/\.htm$/\.html/’ *.htm

한 줄, 루프 없음:

ls -1 | xargs -L 1 -I {} bash -c 'mv $1 "${1%.*}.txt"' _ {}

예:

$ ls
60acbc4d-3a75-4090-85ad-b7d027df8145.json  ac8453e2-0d82-4d43-b80e-205edb754700.json
$ ls -1 | xargs -L 1 -I {} bash -c 'mv $1 "${1%.*}.txt"' _ {}
$ ls
60acbc4d-3a75-4090-85ad-b7d027df8145.txt  ac8453e2-0d82-4d43-b80e-205edb754700.txt

Linux 또는 window git bash 또는 window의 wsl에서 아래 명령어를 사용하여 현재 디렉토리, 하위 디렉토리 또는 하위 디렉토리에 있는 모든 파일의 확장자를 한 줄의 코드만으로 변경해 보십시오.

find . -depth -name "*.html" -exec sh -c 'mv "$1" "${1%.html}.txt"' _ {} \;

명령어는 엄청난 수의 파일(1초에 수천 개)에 대해 이 작업을 매우 효율적으로 수행하는 것으로 보입니다.예를 들어, 모두 이름을 변경하려면.xml.html 파일,, 파일, 파일, 파일, 파일, 파일, 파일, 파일, 파일, 파일.

mmv ";*.xml" "#1#2.html"

;합니다.*하며, 파일명을 「이러한 파일명」, 「 파일명은 「일치」입니다.#1 ★★★★★★★★★★★★★★★★★」#2대체 이름으로 지정합니다.

은 ★★★★★★★★★★★★★★★★★exec또는 파이프가 너무 느리거나 매우 많은 파일에서 오류가 발생했습니다.

다른 패키지 없이 현재 디렉터리 및 하위 디렉터리 아래의 모든 파일에 대한 파일 확장자 이름 변경(쉘 스크립트만 사용):

  1. 스크립트 " " " " " "rename.sh다음 코드를 가진 현재 디렉토리 아래에 있습니다.

    #!/bin/bash
    
    for file in $(find . -name "*$1"); do
      mv "$file" "${file%$1}$2"
    done
    
  2. 으로 ./rename.sh .old .new.

    ㅇㅇ../rename.sh .html .txt

이거 드셔보세요

rename .html .txt *.html 

사용방법:

rename [find] [replace_with] [criteria]

다른 사람의 웹사이트가 크롤한 후, 나는 결국 수천 개의 파일이 확장자 .html을 놓치고 말았고, 넓은 서브 디렉토리 트리에 걸쳐서.

확장자가 .html인 파일을 제외하고 모두 한 번에 이름을 바꾸려면(대부분의 파일에는 확장자가 없습니다) 다음과 같이 해야 합니다.

cd wwwroot
find . -xtype f \! -iname *.html   -exec mv -iv "{}"  "{}.html"  \;  # batch rename files to append .html suffix IF MISSING

OP의 경우 다음과 같이 *.txt 파일 이름만 바꾸도록 약간 수정할 수 있습니다.

find . -xtype f  -iname *.txt   -exec filename="{}"  mv -iv ${filename%.*}.{txt,html}  \; 

고장(해머타임) :

- *. iname *.txt
- .

mv - iv "{.{txt,html}" - find가 {}을(를) 파일명으로 전달하면 ${filename%입니다.*}은(는) 확장자를 사용하지 않고 기본 이름을 추출하여 mv에 대한 매개 변수를 형성합니다. bash는 {txt,sys}을(를) 사용하여 이 이름을 두 개의 매개 변수로 다시 작성하여 최종 명령을 다음과 같이 실행합니다.mv -iv "filename.txt" "filename.html"

수정 필요: 파일 이름의 공백 처리

이것은, 복수의 내선 번호를 동시에 변경하는 좋은 방법입니다.

for fname in *.{mp4,avi}
do
   mv -v "$fname" "${fname%.???}.mkv"
done

주의: 확장자 사이즈가 같도록 주의해 주세요(??)

파티에 조금 늦었다.xargs를 사용하여 수행할 수 있습니다.

ls *.html | xargs -I {} sh -c 'mv $1 `basename $1 .html`.txt' - {}

또는 모든 파일이 일부 폴더에 있는 경우

ls folder/*.html | xargs -I {} sh -c 'mv $1 folder/`basename $1 .html`.txt' - {}

이전에 제안했던 것과 마찬가지로 다음과 같은 방법으로 작업을 수행했습니다.

find . -name '*OldText*' -exec sh -c 'mv "$0" "${0/OldText/NewText}"' {} \;

처음에 검증한 것은

find . -name '*OldText*' -exec sh -c 'echo mv "$0" "${0/OldText/NewText}"' {} \;

깔끔하고 심플!

find . -iname *.html  -exec mv {} "$(basename {} .html).text"  \;

PERL을 선호하는 경우 PERL의 작성자인 Larry Wall에 의해 작성된 짧은 PERL 스크립트가 있습니다.이 스크립트는 원하는 대로 실행됩니다.tips.webdesign10.com/files/rename.pl.txt

이 예에서는, 다음의 조작이 유효합니다.

rename.pl 's/html/txt/' *.html

가장 쉬운 방법은rename.ulLinux distro의 대부분에 있습니다.

rename.ul -o -v [ old File Extension ][ new File Extension ][적용하는 파일을 검색하는 식]

rename.ul -o -v .oldext .newext *.oldext

옵션:

-o: 기존 .newext를 덮어쓰지 않음

-v: 상세

-n: 드라이런

불행하게도 휴대하기 쉬운 것은 사소한 것이 아니다.당신은 약간의 expr 마법이 필요할 것입니다.

for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done

메아리가 원하는 대로 작동한다고 만족하면 메아리를 제거하세요.

편집: basename이 경우는 조금 더 읽기 쉬울지도 모릅니다만,expr일반적으로 유연성이 높아집니다.

여기 내가 이름을 바꾸던 것이 있다..edge파일링하다.blade.php

for file in *.edge; do     mv "$file" "$(basename "$file" .edge).blade.php"; done

매력적으로 작용한다.

Bash에서 함수를 만들 수도 있습니다..bashrc아무데나 쓸 수 있어요.

change-ext() {
    for file in *.$1; do mv "$file" "$(basename "$file" .$1).$2"; done
}

사용방법:

change-ext css scss

기능 중인 코드 소스: https://stackoverflow.com/a/1224786/6732111

다음은 AWK를 사용한 해결책입니다.파일이 작업 디렉토리에 있는 것을 확인합니다.또는 html 파일이 있는 디렉토리로 cd를 전송하고 다음 명령을 실행합니다.

for i in $(ls | grep .html); do j=$(echo $i | grep -oh "^\w*." | awk '{print $1"txt"}'); mv $i $j; done

이 코드를 제 .bashrc에 썼습니다.

alias find-ext='read -p "Path (dot for current): " p_path; read -p "Ext (unpunctured): " p_ext1; find $p_path -type f -name "*."$p_ext1'
alias rename-ext='read -p "Path (dot for current): " p_path; read -p "Ext (unpunctured): " p_ext1; read -p "Change by ext. (unpunctured): " p_ext2; echo -en "\nFound files:\n"; find $p_path -type f -name "*.$p_ext1"; find $p_path -type f -name "*.$p_ext1" -exec sh -c '\''mv "$1" "${1%.'\''$p_ext1'\''}.'\''$p_ext2'\''" '\'' _ {} \;; echo -en "\nChanged Files:\n"; find $p_path -type f -name "*.$p_ext2";'

다음과 같은 구조를 가진 "/home/<user>/example-files"와 같은 폴더:

  • /home/<user>/files:
    • 파일 1.txt
    • 파일 2.txt
    • 파일 3.pdf
    • 파일 4.csv

명령어는 다음과 같이 동작합니다.

~$ find-text
Path (dot for current): example-files/
Ext (unpunctured): txt

example-files/file1.txt
example-files/file2.txt


~$ rename-text
Path (dot for current): ./example-files
Ext (unpunctured): txt
Change by ext. (unpunctured): mp3

Found files:
./example-files/file1.txt
./example-files/file1.txt

Changed Files:
./example-files/file1.mp3
./example-files/file1.mp3
~$

파일 이름을 대량으로 변경하기 위해 설계된 도구를 사용할 수 있습니다(예: renameer).

현재 폴더의 모든 파일 확장자의 이름을 변경하려면:

$ renamer --find ".html" --replace ".txt" --dry-run * 

이 밖에도 많은 사용 가 있습니다.

언급URL : https://stackoverflow.com/questions/1224766/how-do-i-rename-the-extension-for-a-bunch-of-files

반응형