접두사/접미사를 사용하여 이름을 변경하는 방법은 무엇입니까?
내가 어떻게 하니mv original.filename new.original.filename
원래 파일 이름을 다시 입력하지 않고?
저는 이런 일을 할 수 있다고 상상할 것입니다.mv -p=new. original.filename
아니면 아마도mv original.filename new.~
아니면 뭐든지 - 하지만 보고 나면 이런 것은 볼 수 없습니다.man mv
/info mv
페이지들
물론 이를 위해 셸 스크립트를 작성할 수는 있지만, 기존의 명령/플래그는 없습니까?
당신은 사용할 수 있습니다.rename(1)
명령:
rename 's/(.*)$/new.$1/' original.filename
편집: 만약rename
사용할 수 없으며 둘 이상의 파일 이름을 변경해야 합니다. 셸 스크립팅은 간단하고 간단할 수 있습니다.예를 들어, 모든 이름을 변경하려면*.jpg
로.prefix_*.jpg
현재 디렉터리:
for filename in *.jpg; do mv "$filename" "prefix_${filename}"; done;
또는 Dave Webb의 답변을 활용하고 브레이스 확장을 사용합니다.
for filename in *.jpg; do mv {,prefix_}"$filename"; done;
Bash 및 zsh에서는 Brace Expansion을 사용하여 이 작업을 수행할 수 있습니다.이렇게 하면 중괄호 안에 있는 항목 목록이 확장됩니다.예:
# echo {vanilla,chocolate,strawberry}-ice-cream
vanilla-ice-cream chocolate-ice-cream strawberry-ice-cream
따라서 다음과 같이 이름을 변경할 수 있습니다.
mv {,new.}original.filename
다음과 같이 확장됩니다.
mv original.filename new.original.filename
for 루프를 만들어 유닉스 호환 다중 파일 이름 변경(와일드카드 사용)을 수행할 수 있습니다.
for file in *; do
mv $file new.${file%%}
done
나는 사람들이 언급하는 것을 보았습니다.rename
명령어이지만 유닉스 시스템에서는 일상적으로 사용할 수 없습니다(예: 리눅스 시스템이나 Cygwin과 달리 이름 바꾸기는 스크립트가 아닌 실행 파일입니다).해당 버전의rename
에는 상당히 제한된 기능이 있습니다.
rename from to file ...
파일 이름의 일부를 to로 대체하며, man 페이지에 표시된 예는 다음과 같습니다.
rename foo foo0 foo? foo??
이 이름은 foo1에서 foo01까지, foo10에서 foo010 등으로 변경됩니다.
다음 Perl 스크립트를 사용합니다.rename
제가 원래 1992년경 카멜 초판에서 캐머런 파일 이름을 바꾸기 위해 확장한 것입니다.
#!/bin/perl -w
#
# @(#)$Id: rename.pl,v 1.7 2008/02/16 07:53:08 jleffler Exp $
#
# Rename files using a Perl substitute or transliterate command
use strict;
use Getopt::Std;
my(%opts);
my($usage) = "Usage: $0 [-fnxV] perlexpr [filenames]\n";
my($force) = 0;
my($noexc) = 0;
my($trace) = 0;
die $usage unless getopts('fnxV', \%opts);
if ($opts{V})
{
printf "%s\n", q'RENAME Version $Revision: 1.7 $ ($Date: 2008/02/16 07:53:08 $)';
exit 0;
}
$force = 1 if ($opts{f});
$noexc = 1 if ($opts{n});
$trace = 1 if ($opts{x});
my($op) = shift;
die $usage unless defined $op;
if (!@ARGV) {
@ARGV = <STDIN>;
chop(@ARGV);
}
for (@ARGV)
{
if (-e $_ || -l $_)
{
my($was) = $_;
eval $op;
die $@ if $@;
next if ($was eq $_);
if ($force == 0 && -f $_)
{
print STDERR "rename failed: $was - $_ exists\n";
}
else
{
print "+ $was --> $_\n" if $trace;
print STDERR "rename failed: $was - $!\n"
unless ($noexc || rename($was, $_));
}
}
else
{
print STDERR "$_ - $!\n";
}
}
이렇게 하면 모든 Perl 대체 또는 변환 명령을 맵 파일 이름에 쓸 수 있습니다.요청한 특정 예제에서는 다음을 사용합니다.
rename 's/^/new./' original.filename
여기에 훌륭한 답변이 있다는 것은 알지만 접미사를 추가할 때 파일 이름 확장자를 처리할 참조가 없습니다.
모두에 '_en' 접미사를 추가해야 했습니다.wav
파일 확장명 앞의 폴더에 있는 파일입니다.
마법이 여기 있습니다.%.*
for filename in *.wav; do mv $filename ${filename%.*}_en.wav; done;
다른 파일 확장자를 처리해야 하는 경우 이 대답을 확인하십시오.조금 덜 직관적입니다.
디렉토리에서 파일 이름을 대량으로 변경하는 가장 쉬운 방법은 다음과 같습니다.
ls | xargs -I fileName mv fileName fileName.suffix
수정할 수 있는 경우 접두사 대신 접미사를 사용할 수 있습니다.그런 다음 탭 완성을 사용하여 원래 파일 이름을 가져오고 접미사를 추가할 수 있습니다.
그렇지 않으면 아니오, 이것은 mv 명령에서 지원되지 않습니다.하지만 간단한 셸 스크립트는 대처할 수 있습니다.
이 경우 파일 그룹을 사용하기 전에 파일 이름을 변경해야 합니다.각 파일은 그룹에서 고유한 역할과 고유한 패턴을 가집니다.
따라서 다음과 같은 이름 바꾸기 명령 목록이 나타납니다.
f=`ls *canctn[0-9]*` ; mv $f CNLC.$f
f=`ls *acustb[0-9]*` ; mv $f CATB.$f
f=`ls *accusgtb[0-9]*` ; mv $f CATB.$f
f=`ls *acus[0-9]*` ; mv $f CAUS.$f
이것도 시도해 보십시오.
f=MyFileName; mv $f {pref1,pref2}$f{suf1,suf2}
접두사와 접미사가 있는 모든 조합이 생성됩니다.
pref1.MyFileName.suf1
...
pref2.MyFileName.suf2
동일한 문제를 해결하는 또 다른 방법은 아래와 같이 매핑 배열을 만들고 각 파일 유형에 대해 코어 응답 접두사를 추가하는 것입니다.
#!/bin/bash
unset masks
typeset -A masks
masks[ip[0-9]]=ip
masks[iaf_usg[0-9]]=ip_usg
masks[ipusg[0-9]]=ip_usg
...
for fileMask in ${!masks[*]};
do
registryEntry="${masks[$fileMask]}";
fileName=*${fileMask}*
[ -e ${fileName} ] && mv ${fileName} ${registryEntry}.${fileName}
done
대량 파일 이름 바꾸기 bash 스크립트
#!/bin/bash
# USAGE: cd FILESDIRECTORY; RENAMERFILEPATH/MultipleFileRenamer.sh FILENAMEPREFIX INITNUMBER
# USAGE EXAMPLE: cd PHOTOS; /home/Desktop/MultipleFileRenamer.sh 2016_
# VERSION: 2016.03.05.
# COPYRIGHT: Harkály Gergő | mangoRDI (https://wwww.mangordi.com/)
# check isset INITNUMBER argument, if not, set 1 | INITNUMBER is the first number after renaming
if [ -z "$2" ]
then i=1;
else
i=$2;
fi
# counts the files to set leading zeros before number | max 1000 files
count=$(ls -l * | wc -l)
if [ $count -lt 10 ]
then zeros=1;
else
if [ $count -lt 100 ]
then zeros=2;
else
zeros=3
fi
fi
# rename script
for file in *
do
mv $file $1_$(printf %0"$zeros"d.%s ${i%.*} ${file##*.})
let i="$i+1"
done
저는 다른 어떤 대답도 좋아하지 않습니다.
제 생각에는 당신이 바닐라 바시 솔루션을 원하는 것 같습니다. 여기 !
무슨 일이 일어날지 보기 위해 먼저 에코로 이것을 시도해 보세요!
수천 개의 파일에서 명령을 사용하기 전에 명령을 테스트하십시오.
접두사를 삽입하려면 '/.'를 제거합니다.
find . -type f -exec bash -c 'echo prefix_${0#./}' {} \;
에서질문,prefix_
이라new.
.
find . -type f -exec bash -c 'echo mv $0 new.${0#./}' {} \;
다음에 추가할 확장자 제거
find . -type f -exec bash -c 'echo ${0%.*}_suffix.${0##*.}' {} \;
이제 이 이름을 사용하여 이름을 바꾸려면 에코를 다음으로 바꿉니다.mv $0
.
설정:
find . -type f -exec bash -c 'mv $0 1.${0#./}' {} \;
영감을 받은 사람: https://gist.github.com/larshaendler/723d2ec447c3c694b71dc6e3bc3aadc9
이것은 여기서 허용된 답변을 약간 확장하고 유닉스의 다른 답변과 결합합니다.SE.
이 기능은 가장 단순한 명령에 의존하면서도 한 줄로 연결된 상태에서 더 많은 전력을 얻을 수 있는 방법으로 설계되었습니다.
접두사 추가
시운전 명령어 ;)
for old in *.jpg; do new=`echo $old | sed -e's/^/prefix_/'`; echo "$old -- $new"; done
진짜:
for old in *.jpg; do new=`echo $old | sed -e's/^/prefix_/'`; mv "$old" "$new"; done
검색 및 바꾸기를 사용하여 문자열의 시작 부분을 바꿉니다.^
와 함께prefix_
.
접미사 추가
이▁of▁power의 인 힘을 합니다.sed
동일한 패턴을 사용하여 접미사를 추가할 수 있습니다.
# \1 might be $1 for you
for old in *.jpg; do new=`echo $old | sed -e's/(.jpg)$/_suffix\1/'`; mv "$old" "$new"; done
▁▁with▁you▁if다▁lessre하숙.sed
이는 다음과 같습니다.
for old in *.jpg; do new=`echo $old | sed -e's/.jpg$/_suffix.jpg/'`; mv "$old" "$new"; done
접두사/접미사 제거
이제 이전 명령을 사용하지 않으면 접두사/접미사를 제거할 수 있습니다.
for old in *.jpg; do new=`echo $old | sed -e's/^prefix_//'`; mv "$old" "$new"; done
언급URL : https://stackoverflow.com/questions/208181/how-to-rename-with-prefix-suffix
'code' 카테고리의 다른 글
외래 키는 항상 다른 테이블의 고유 키를 참조합니까? (0) | 2023.06.27 |
---|---|
VBA를 사용하여 세미콜론으로 구분된 CSV 파일을 저장하는 방법은 무엇입니까? (0) | 2023.06.27 |
Express에서 "다음" 매개 변수는 무엇에 사용됩니까? (0) | 2023.06.22 |
중첩된 시도/제외 블록에서 예외를 다시 발생시키는 방법은 무엇입니까? (0) | 2023.06.22 |
하나의 라이너: 인덱스를 키로 하는 목록에서 사전 만들기 (0) | 2023.06.22 |