완전히 확신할 수는 없지만, mv
와 ( as rename
에서 )의 차이점은 무엇인가요? 정규식을 허용하고 정규식을 허용하지 않는 것 외에 둘 중 하나에 장점이 있나요? 나는 동시에 여러 파일 이름 바꾸기를 처리하는 것도 가능하다고 생각 하지만 그렇게 하지 마십시오.util-linux-ng 2.17.2
/usr/bin/rename
rename
mv
rename
mv
man
나는 그들의 페이지에서 또는 내 자신의 조사를 통해 그 밖의 무엇이 그들을 독특하게 만드는지에 대한 명확한 표시를 찾을 수 없습니다 .
답변1
둘 다 기본적으로 뚜껑에 적힌 내용입니다.
mv
표준 유틸리티입니다도착하다이동하다하나 이상의 파일을 지정된 대상으로 보냅니다. 이동할 파일이 하나만 있는 경우 파일 이름을 바꾸는 데 사용할 수 있습니다. 둘 이상이면 mv
대상이 디렉토리인 경우에만 작동하고 파일을 그곳으로 이동합니다.
따라서 mv foo bar
파일을 foo
디렉터리로 이동하거나 bar
(존재하는 경우) 이름을 바꾸십시오 foo
( bar
존재 bar
하지 않거나 디렉터리가 아닌 경우). mv foo1 foo2 bar
두 개의 파일만 해당 디렉터리로 이동되며 bar
디렉터리 bar
가 아닌 경우 경고가 발생합니다.
mv
파일을 이동하기 위해 C 라이브러리 함수가 호출되며 rename()
, 작동하지 않으면(다른 파일 시스템으로 이동) 파일을 복사하고 원본 파일을 삭제합니다.
여러 파일의 이름을 바꾸는 것이 전부라면 mv
쉘 루프를 사용해야 합니다. 웹사이트에 이에 대한 질문이 많이 있습니다.이것,이것,다른 사람.
한편, 각종 rename
공익사업이름을 바꿔라파일을 개별적으로.
rename
유틸리티 리눅스 에서언급하신 내용은 , 및 로 rename foo bar *
변경하는 것과 같은 간단한 문자열 교체를 수행합니다 .foobar
barbar
asdffoo
asdfbar
물론아니요단, 정규식을 사용해주세요!
Perl 이름 바꾸기 유틸리티(또는 그에 따른 다양한 사례)는 Perl 표현식을 사용하여 파일 이름을 변환합니다. 다음 명령을 사용할 가능성이 가장 높습니다.s/pattern/replacement/
무늬 예정규식.
util-linux 이름 바꾸기와 Perl 이름 바꾸기는 모두 파일 이름을 적절하게 변경하여 파일을 다른 디렉토리로 동시에 이동하는 데 사용할 수 있지만 이는 약간 어색합니다. 둘 다 단지 rename()
파일을 호출하기 때문에 한 파일 시스템에서 다른 파일 시스템으로 이동하는 것은 작동하지 않습니다.
rename
당신이 가지고 있는 것이 무엇인지 에 관해서는 ,배포판에 따라 다를 수 있음및/또는 귀하가 설치한 콘텐츠. 대부분은 지원되므로 rename --version
이를 사용하여 어떤 것을 가지고 있는지 확인하십시오.
답변2
mv
파일 이름만 변경하면 됩니다(다른 파일 시스템이나 경로로 이동할 수도 있음). 이전 이름과 새 이름을 지정하면 파일이 새 이름이나 새 위치로 변경됩니다.
rename
일괄 이름 지정을 변경하는 데 사용됩니다.
foo000.log
through 1000개의 파일이 있고 이를 through foo999.log
로 변경하려고 한다고 가정합니다 .bar000.log
bar999.log
이 작업 등 을 수행 mv
해야 하며 그렇지 않으면 스크립트를 작성하면 됩니다.mv foo000.log bar000.log
mv foo001 bar001.log
rename
간단히 하면 , 짜잔 rename foo bar foo*.log
, 수천 개의 파일이 즉시 변경됩니다! 아주 멋지다.
자세한 내용은 이 페이지를 다시 확인하세요 man rename
.
답변3
MV
이것은 한 가지 일을 잘 수행하도록 설계된 기본 명령줄입니다(유닉스 철학).파일 또는 디렉터리 이동.
STDOUT
& ¹를 해킹하여 대상 문자열을 동적으로 수정할 수 있지만 STDIN
이는 단지똑똑한 해커는 아니다
이름 바꾸기(펄)
이 작업을 수행할 수도 있고 수행하지 못할 수도 있는 같은 이름의 다른 도구가 있으므로 주의하세요.
사람들이 이야기할 때 rename
우리는 이것보다는 ELF
덜 강력한(마법?) 것을 생각합니다.
기본이 아니고 Perl입니다. 이는 매우 강력한 일부 Perl 기능을 전달할 수 있습니다.
다음 예를 고려하십시오.
당신이 원하는이름을 바꿔라다음과 같은 파일 묶음
foobar_1.txt
foobar_2.txt
foobar_3.txt
다음과 같이 숫자 앞에 0을 추가할 수 있습니다 sprintf()
(정규식을 사용하면 Perl입니다 :D).
rename 's/(\d+)/sprintf("%04d", $1)/e' foobar_*.txt
이제 다음을 수행할 수 있습니다.
foobar_0001.txt
foobar_0002.txt
foobar_0003.txt
이건 기본 명령어는 아니죠?
이름을 바꿔라실제로 디자인되지 않았습니다.디렉토리 이동, 하지만 다음과 같이 할 수 있습니다.
$ mkdir -p /tmp/foo/bar/base
$ touch /tmp/foo/bar/base/file
$ rename 's!/tmp/foo/bar/base/file!/tmp/file!' /tmp/foo/bar/base/file
이동된 파일
/tmp/file
*.stackexchange.*
¹ 웹사이트에서 볼 수 있는 일부 코드
for FILE in `ls *.txt`
do
mv ${FILE} `echo ${FILE} | sed 's/anything_ugly/anything_still_ugly/'`
done
이 길이 아닌데, 이는 적절한 순간에 적절한 도구를 사용해야 하는 이유를 설명하기 위한 명백한 실수입니다.
답변4
MV파일과 디렉터리를 이동하거나 이름을 바꾸고 백업하세요.이름을 바꿔라파일 이름을 바꾸면 됩니다.
MV더 많은 기능과 옵션이 있습니다. 기능적 차이점을 보려면 각 스위치의 매뉴얼 페이지를 확인하십시오. 사용법을 살펴보자남성Ubuntu 18.04LTS(각 패키지 버전에 따라 상황이 다를 수 있음):
mv 옵션(도움말 및 버전 생략)
--backup[=CONTROL]
make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force
do not prompt before overwriting
-i, --interactive
prompt before overwrite
-n, --no-clobber
do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
--strip-trailing-slashes
remove any trailing slashes from each SOURCE argument
-S, --suffix=SUFFIX
override the usual backup suffix
-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
-T, --no-target-directory
treat DEST as a normal file
-u, --update
move only when the SOURCE file is newer than the destination file or when the destination file is missing
-v, --verbose
explain what is being done
-Z, --context
set SELinux security context of destination file to default type
옵션 이름 바꾸기(도움말 및 버전 생략)
-s, --symlink
Do not rename a symlink but its target.
-v, --verbose
Show which files where renamed, if any.
-n, --no-act
Do not make any changes.
-o, --no-overwrite
Do not overwrite existing files.