파일 이름을 바꾸고 문자를 바꾸는 방법? 그룹이 있습니다 . 나는를 교체 할 필요가

:이름 안에 (콜론) 이있는 파일 그룹이 있습니다 . 나는를 교체 할 필요가 :-(대시).

스크립트에서이 작업을 수행하는 쉬운 방법이 있습니까?

샘플 파일 이름 : 2013-10-11:11:52:08_055456663_045585_.txt



답변

간단한 1- 라이너가해야합니다 (Posix sh호환 쉘을 가정 ) :

for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done

설명:

  • for ... in ...; do ...; doneA는 루프

  • *:* 현재 디렉토리 :의 이름 에있는 모든 파일 및 디렉토리 와 일치

  • f 루프에서 이러한 각 파일 이름에 차례로 할당됩니다.

  • mv첫 번째 인수를 두 번째 인수로 이름을 바꿉니다. -v(자세한 내용)은 자신이하는 일을 인쇄하도록 요청합니다. 이 옵션은 GNU-utils에 따라 다르므로 Linux에서는 사용할 수 있지만 Solaris에서는 사용할 수 없습니다

  • $(...) 서브 쉘에서 코드를 실행하고 출력을 대체

  • echo 인수를 표준 출력에 인쇄합니다

  • tr 제공된 맵에 따라 표준 출력을 읽고 문자를 번역합니다.

당신이 사용하는 경우 bash는 , 당신은 여분의 쉘 (산란을 방지 할 수 있습니다 $()하위 프로세스와을 () tr로 대체하여) $(...)와 함께 ${f//:/-}.


답변

다른 게시물에서 언급 했듯이이 rename도구는 당신을 위해 속임수를 쓸 수 있습니다. 다음 rename s/:/-/ <files to rename>
과 같이 입력하면됩니다.
이것은 모든 콜론을 마지막에 이름을 지정한 모든 파일에서 대시로 바꿉니다.2013-10-*

여기 내 다른 게시물에 대한 링크가 있습니다


답변

유닉스 전문가가 bash 로이 작업을 수행 할 수 있다고 확신하지만 루비가있는 빠르고 더러운 버전이 있습니다.

path_to_files = "/home/username/wrongnames/"
filenames = `ls #{path_to_files}`.split
filenames.each do |fn|
  `mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}`
end

path_to_files를 이름이 잘못된 파일의 경로로 설정하십시오. 위의 코드를 rename.rb라는 파일에 저장 한 다음 :

username@machinename$ ruby rename.rb

답변

하나 또는 몇 개의 파일 만 있으면 이름을 바꿀 수 있습니다.

  1. 대상으로하는 파일 이름의 패턴을 변수로 저장하십시오 p="201*".
  2. 이름 을 바꾸려 는 이전 파일 이름 을 저장하십시오 old_name=$(ls | grep $p).
  3. 필요한 문자 교체와 함께 새 파일 이름 을 저장하십시오 .

    new_name=$(ls | grep $p | sed 's/:/_/g')        # Using 'sed'
    
                OR
    
    new_name=$(ls | grep $p | tr ':' '_')           # Using 'tr'
    

보너스 정리 :

  a. 균일 성을 위해 대시 (-)와 콜론 (:)을 밑줄 (_)로 바꾸려면 다음과 같이하십시오.

    new_name=$(ls | grep $p | tr ':-' '_');

  비. 마지막 밑줄 () 바로 가기를 원하면 variable을 다음과 같이 .txt설정 new_name하십시오.

    new_name=$(ls | grep $p | tr ':-' '_' | sed 's/_\./\./')
  1. 이제 필요에 따라 파일 이름을 바꾸십시오. mv $old_name $new_name

        
NB : mv이름 바꾸기 작업에서 파일 이름이 있으면 실패 spaces합니다. 이 경우 다음과 같이 적절한 변수를 따옴표로 묶으십시오.
mv "$old_name" $new_name OR mv $old_name "$new_name" OR mv "$old_name" "$new_name"


원 라이너

1a: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | sed 's/:/_/g'); mv $old_name $new_name

1b: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':' '_'); mv $old_name $new_name

2: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':-' '_'); mv $old_name $new_name

3: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':-' '_' | sed 's/_\./\./'); mv $old_name $new_name

답변

이름 바꾸기를 사용하여 :

$ renamer --find ":" --replace "-" *

답변

이것은 과잉 일 수 있지만이 답변에 제공된 링크에서 스크립트를 사용하여 특수 문자의 이름을 바꿀 수 있습니다.

/superuser//a/858671/365691