파일 및 디렉토리 이름 바꾸기 (접두사 추가)


137

모든 폴더와 디렉토리에 접두사를 추가하고 싶습니다.

예:

나는 가지고있다

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

접두사 "PRE_"를 추가하고 싶습니다

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

문안 인사,


답변 에서와 같이 AWK를 사용하십시오 : awk '$ 0 = "prefix"$ 0'file> new_file
Mark

답변:


224

Peter van der Heijden 덕분에 공백이있는 파일 이름을 사용할 수 있습니다.

for f in * ; do mv -- "$f" "PRE_$f" ; done

( "-"는 대시로 시작하는 파일로 성공하려면 이름이 mv 명령의 스위치로 해석됩니다)


허, 사실, 공백이있는 파일이 있으면 완전히 작동하지 않습니다.
CanSpice

12
ls명령을로 변경하고 *인수를 큰 따옴표로 묶는 경우 mv공백이 포함 된 파일에 적용됩니다.
피터 반 데르 Heijden

@CanSpice 비슷한 스크립트로이 작업을 취소 할 수 있습니까 (접두사 제거)?
파스칼 Qyy

3
고마워 친구 여기 인턴은 67 개의 파일을 모두 바꾸는 그의 손가락 뚜껑을 잃어 버렸습니다. 건배.
Felipe

1
대시로 시작하는 파일을 방지하려면 "mv"뿐만 아니라 "mv-"여야합니다. 그렇지 않으면 명령 스위치로 해석됩니다. 이 문제를 해결하기 위해 수정 사항을 제공하겠습니다.
Jacob C.는 Reinstate Monica

81

다음과 같이 이름 바꾸기 스크립트를 사용하십시오 .

$ rename 's/^/PRE_/' *

파일 이름에 메타 문자 나 공백에는 문제가 없습니다.


3
일부 시스템에는 다르게 작동하는 "rename"이라는 util-linux 유틸리티가 있습니다 (우분투에서는 "rename.ul"이라고 함).
추후 공지가있을 때까지 일시 중지되었습니다.

rename여러 파일 이름 바꾸기를 매우 쉽게 처리하는 데 항상 도움이되었습니다.
Alan Haggai Alavi 님

61

파일 (디렉토리)에 접두사 또는 접미사추가 하려면 xargs를 사용하여 간단하고 강력한 방법을 사용할 수 있습니다 .

ls | xargs -I {} mv {} PRE_{}

ls | xargs -I {} mv {} {}_SUF

xargs의 매개 변수 대체 옵션 인 -I를 사용하고 있습니다. 맨 페이지에서 더 자세한 정보를 얻을 수 있습니다.


2
추신 : 현재 디렉토리의 일부 파일 (디렉토리)의 이름바꾸려면 다음과 같이 xargs 전에 필터링하십시오.ls *.old | xargs -I {} mv {} PRE_{}
Zheng Qsin

흥미롭게도 이름 바꾸기를 사용하지 못했습니다. xargs를 사용하면 RHEL 설정에
적합하므로이

filename에 작은 따옴표가 포함되어 있으면 작동하지 않습니다. xargs : 일치하지 않는 작은 따옴표; 기본 따옴표로 당신은 -0 옵션을 사용하지 않는 xargs를 특별하다
예브게니 Veretennikov

36

간단한 find명령을 실행하면됩니다 :

find * -maxdepth 0 -exec mv {} PRE_{} \;

위 명령은 현재 디렉토리의 모든 파일과 폴더 앞에 접두사를 붙입니다 PRE_.


8

util-linux를 사용하여 현재 디렉토리의 모든 파일과 폴더에 접두사를 추가하려면 rename( prename데비안과 다른 시스템의 perl 변형과 달리) 다음을 수행 할 수 있습니다.

rename '' <prefix> *

이것은 빈 문자열의 첫 번째 항목 (즉시 발견됨)을 찾은 다음 해당 항목을 접두어로 대체 한 다음 나머지 파일 이름을 그 끝에 붙입니다. 끝난.

들어 접미사 , 당신은 할 필요가 펄 버전을 사용 또는 사용 찾기 .


util-linux데비안 스트레치에서 이것을 제공하는 것 같습니다 /usr/bin/rename.ul.
user1338062

7

Ruby (1.9+)가있는 경우

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'

7

Perl과 함께 :

perl -e 'rename $_, "PRE_$_" for <*>'

2

사용할 수있는 간단한 스크립트는 다음과 같습니다. 비표준 모듈 File::chdir을 사용하여 관리 cd작업 을 처리하는 것을 좋아 하므로이 스크립트를 그대로 사용하려면 설치해야합니다 ( sudo cpan File::chdir).

#!/usr/bin/perl

use strict;
use warnings;

use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module

die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;

opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);

$CWD = $dir; # cd to the directory, needs File::chdir

foreach my $file (@files) {
  next if ($file =~ /^\.+$/); # avoid folders . and ..
  next if ($0 =~ /$file/); # avoid moving this script if it is in the directory

  move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}

1

내 시스템에는 rename명령 이 없습니다 . 간단한 라이너 하나입니다. 모든 HTML 파일을 재귀 적으로 찾고 prefix_이름 앞에 추가 합니다.

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done

1
find: 당신은 또한 명령, 루프 필요없이 실행할 수 있습니다 stackoverflow.com/a/33297439/2351568
DJCrashdummy

0

그러면 디렉토리에 파일 접두사가 붙습니다.

${f%/*}마지막 슬래시까지의 경로입니다 /> 디렉토리 -

${f##*/}마지막 슬래시 앞에 아무것도없는 텍스트입니다 /경로없이> 파일 이름 -

그것이 그렇게되는 방법입니다.

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.