:
이름 안에 (콜론) 이있는 파일 그룹이 있습니다 . 나는를 교체 할 필요가 :
와 -
(대시).
스크립트에서이 작업을 수행하는 쉬운 방법이 있습니까?
샘플 파일 이름 : 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 ...; done
A는 루프 -
*:*
현재 디렉토리:
의 이름 에있는 모든 파일 및 디렉토리 와 일치 -
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
답변
하나 또는 몇 개의 파일 만 있으면 이름을 바꿀 수 있습니다.
- 대상으로하는 파일 이름의 패턴을 변수로 저장하십시오
p="201*"
. - 이름 을 바꾸려 는 이전 파일 이름 을 저장하십시오
old_name=$(ls | grep $p)
. -
필요한 문자 교체와 함께 새 파일 이름 을 저장하십시오 .
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/_\./\./')
- 이제 필요에 따라 파일 이름을 바꾸십시오.
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