문자를 교체하여 여러 파일 이름 변경


29

that : screenshot 13:25.png
Windows 와 같은 이름의 여러 파일 이 ":"때문에이 파일을 여는 데 어려움을 겪고 있습니다.

교체하려면 어떻게해야합니까?


2
질문을 해결 된 것으로 표시하기위한 답변을 수락 할 수 있습니까? 이것은 다른 사용자에게 큰 도움이 될 것입니다.
MERose

답변:


52

터미널 cd에서 올바른 디렉토리로 이동 한 다음 실행하십시오.

rename 's/\:/-/g' *.png -vn

이름 변경 을 미리 볼 수 있습니다. 그것은 교체해야합니다 :함께 -.

올바르게 보이는 경우 n끝에서를 제거 하면 실제 이름이 변경됩니다.

참고 : 17.04 이상의 Ubuntu 버전은와 함께 제공되지 rename않지만 기본 리포지토리에서 계속 사용할 수 있으므로 사용 sudo apt install rename하십시오.


답장을 보내 주셔서 감사합니다. 시도한 결과 다음과 같은 문제가 있습니다. 대체 패턴이 (1 번) 1 행에서 종료되지 않았습니다.
user236152

@ user236152 죄송합니다. 이스케이프 백 슬래시로 약간 화가났습니다 (자동 조종 장치에있었습니다!). 커플을 제거했으며 이제 유효해야합니다.
Oli

아마도 선택한 모든 파일에서 실행되는 다른 플랫폼에서 문제를 일으킬 수있는 모든 문자를 대체 하는 간단한 노틸러스 스크립트 가 "멀티 플랫폼"사용자에게 유용 할 수 있습니다.
Sadi

2
왜 사용합니까? 그것은 당신이하고있는 일을 보여줍니다 (실수하면 되돌릴 수 있습니다). 왜 마지막에? 그냥 n쉽게 제거 할 수 있습니다.
Oli

1
@nightcrawler 완전히 별개의 대체품을 체인으로 묶을 수 있어야합니다.rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli

10

순수한 bash 솔루션은 다음과 같습니다.

for i in *:*; do
    mv "$i" "${i//:/_}"
done

${var//pattern/replacement}형식의 모든 항목을 대체 할 pattern함께 replacement변수 $var. bash의 문자열 조작 기능에 대한 자세한 내용은 여기를 참조 하십시오 .

여러 문자에 대해이 작업을 수행하려면 간단히 문자 클래스에 배치하면됩니다. 따라서, 예를 들어, 모두를 대체하기 위해 ;, :, =, +, %, ,밑줄, 당신은 할 수 있습니다 :

$ ls 
1foo:bar  2foo:bar:baz  3foo;bar  4foo=bar  5foo%bar  6foo,bar  7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar  2foo_bar_baz  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar

기본적으로 아이디어는 그 [ ]의미 any of the characters listed입니다. 따라서 대체하려는 모든 문자를 문자 클래스에 배치하면 모든 문자가 한 번에 처리됩니다.


요청한 특정 문자의 경우 일부이스케이프 처리 되어야하기 때문에 상황이 약간 더 복잡 합니다 ( /* nix는 Windows보다 파일 이름으로 파일을 허용하지 않기 때문에 무시하고 있습니다. 발행물):

$ ls
1foo<bar  2foo>bar  3foo:bar  4foo\bar  5foo|bar  6foo*bar  7foo?bar  8foo"bar  9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar  2foo_bar  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar  8foo_bar  9foo_bar

나는 탈출합니다 \, '그리고 "을 추가하여 \각각의 앞에.


여러 개별 문자 (예 : Windows에서 허용되지 않는 모든 문자)를 다른 문자로 대체하도록이 기능을 향상시킬 수 있습니까?
Sadi

1
@Sadi는 업데이트 된 답변을 참조하십시오.
terdon

기본적으로 9 개가 있습니다 : "<> :"/ \ | ? * "
Sadi

@Sadi는 업데이트 된 답변을 참조하십시오.
terdon

덕분 에 선택한 파일의 이름을 Windows와 호환 시키는 노틸러스 스크립트 를 만들 수 있습니다 .
Sadi

2

GUI를 선호하는 경우 pyrenamer를 설치하십시오.

sudo apt-get install pyrenamer

그런 다음 실행하십시오.

pyrenamer

패턴 및 이름 바꾸기 형식에 대한 수십 가지 옵션이 있습니다.


1

나는 GUI를 선호 하지만 노틸러스 확장, 즉 노틸러스 액션 엑스트라 :

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

( www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html 참조 )

그런 다음 이름을 바꿀 파일을 선택하고 상황에 맞는 메뉴에서 이름 바꾸기를 클릭하면 파일 이름을 바꾸는 여러 가지 옵션이 제공됩니다.


0

renameutils패키지라는 편리한 프로그램이 qmv대화 형 일괄 이름 변경을 제공합니다. 디렉토리 나 파일 목록에서 파일을 실행하면 파일 이름이 포함 된 임시 텍스트 파일이 생성되어 즐겨 찾는 편집기가 시작됩니다. 편집기를 종료하면 변경 한 파일 이름이 그에 따라 이름이 바뀝니다. qmv배치 이름 바꾸기 문제를 텍스트 편집 문제로 바꿉니다.

이 경우 qmv -f do *:*콜론을 포함하는 모든 파일의 이름을 편집 한 다음 :%s/:/_/gVim 의 명령 (또는 사용하는 편집기에서 해당 검색 및 바꾸기)을 편집 할 수 있습니다.

-f do옵션은 텍스트 파일의 형식을 대상 파일 이름 만 갖도록 설정하므로 검색 및 교체가 더 간단 해집니다. 기본 형식은 각 줄에 두 개의 파일 이름 사본이 있으며 두 번째 파일 만 편집합니다. 파일에서 행을 삭제하거나 다시 정렬 한 경우 올바른 작업을 수행 할 수 있지만 항상 가장 쉬운 것은 아닙니다. 다른 형식도 있습니다.

qmv대신 파이프 등 선택의 명령을 통해 생성 된 파일을 선택할 수있는 sed대화 형 기능을하지 않으려면.


0

그리고 여기에 모든 호환되지 않는 문자를 선택된 모든 파일 이름의 하이픈으로 대체 하는 노틸러스 스크립트 가 있습니다 ( 터던 ;-)

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
    do
        files=`echo "$1" | sed 's/ /\?/g'`
        filesall="$files $filesall"
        shift
    done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done

0

Thunar (XFCE 파일 관리자)는 파일의 대량 이름 바꾸기 기능을 제공합니다. 문자 제거 / 바꾸기, 검색 및 바꾸기, 파일 번호 매기기 등의 옵션이 있습니다.

Thunar 설치 :

sudo apt-get install thunar

열기하는 Thunar, 파일을 찾아, '이름 변경'을을 선택하고 선택 (상황에 맞는 메뉴 또는 경유 F2)


0
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit

이것은 잘 작동하고 변수 ... 프롬프트 이름을 _ 자르기 마지막 Characters.cmd 같은 파일 무언가가
TekWiz2010

3
이것이 맞지만 Windows 배치 스크립팅 언어를 사용합니다. 우분투 관련 질문에 대한 사이트 인 AskUbuntu와 우분투 관련 도구를 사용하고 있습니다. 내 견해로는이 답변이 반드시 여기에 적합하지는 않을 것입니다.
Sergiy Kolodyazhnyy

당신 은 와인을 통해 그것을 실행해야 하지만 아마도 우분투에서 이것을 실행할 수 있습니다 ... 그것은 단지 이상한 대답입니다.
Oli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.