Programing

접두사 / 접미사로 이름을 바꾸는 방법?

lottogame 2020. 9. 10. 08:16
반응형

접두사 / 접미사로 이름을 바꾸는 방법?


mv original.filename new.original.filename원래 파일 이름을 다시 입력 하지 않고 어떻게합니까 ?

내가 좋아하는 뭔가를 할 수있는 상상 mv -p=new. original.filename혹은 mv original.filename new.~이든 뭐든 -하지만 난보고 후이 같은 아무것도 볼 수 없습니다 man mv/ info mv페이지.

물론이 작업을 수행하기 위해 쉘 스크립트를 작성할 수 있지만 기존 명령 / 플래그가 없습니까?


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

rename (1) 명령을 사용할 수 있습니다.

rename 's/(.*)$/new.$1/' original.filename

편집 : 이름 바꾸기를 사용할 수없고 두 개 이상의 파일 이름을 바꿔야하는 경우 쉘 스크립팅이 정말 짧고 간단 할 수 있습니다. 예를 들어, 현재 디렉토리에서 모든 .jpg의 이름 을 prefix_ .jpg 로 바꾸려면 :

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;

for 루프를 생성하여 UNIX 호환 다중 파일 이름 바꾸기 (와일드 카드 사용)를 수행 할 수 있습니다.

for file in *; do
  mv $file new.${file%%}
done

사람들이 rename명령에 대해 언급하는 것을 보았지만 Unix 시스템에서는 일상적으로 사용할 수 없습니다 (리눅스 시스템이나 Cygwin과 달리 두 가지 모두에서 rename은 스크립트가 아닌 실행 파일 임). 해당 버전의 rename기능은 상당히 제한적입니다.

rename from to file ...

파일 이름 from 부분을 to로 대체하며 man 페이지에 제공된 예는 다음과 같습니다.

rename foo foo0 foo? foo??

이렇게하면 foo1이 foo01로, foo10이 foo010으로 이름이 바뀝니다.

나는 rename1992 년경 초판 Camel 책에서 뽑아 낸 Perl 스크립트를 사용하여 파일 이름을 변경했습니다.

#!/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

디렉토리의 파일 이름을 대량으로 바꾸는 가장 쉬운 방법은 다음과 같습니다.

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}

This will produce all combinations with prefixes and suffixes:

pref1.MyFileName.suf1
...
pref2.MyFileName.suf2

Another way to solve same problem is to create mapping array and add corespondent prefix for each file type as shown below:

#!/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

Bulk rename files bash script

#!/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

참고URL : https://stackoverflow.com/questions/208181/how-to-rename-with-prefix-suffix

반응형