ACDC를 AC-DC로 교체
예를 들어이 파일들이 있습니다
ACDC-Rock N ‘Roll은 소음 공해가 아닙니다 .xxx
ACDC-로커 .xxx
ACDC-스릴로 쏴라 .xxx
나는 그들이되기를 원합니다 :
AC-DC-로크 앤 롤은 소음 공해가 아닙니다 .xxx
AC-DC-로커 .xxx
AC-DC-스릴로 쏴라 .xxx
나는이 작업에 sed 또는 awk가 사용된다는 것을 알고 있습니다. 나는 아무것도 할 수 없으므로 도움을 요청하고 있습니다 =)이 작업에 대한 전체 쉘 명령을 제공해 주시겠습니까?
피드백 : OSX 사용자를위한 솔루션
답변
rename 's/ACDC/AC-DC/' *.xxx
…에서 man rename
DESCRIPTION
"rename" renames the filenames supplied according to the rule specified as the
first argument. The perlexpr argument is a Perl expression which is expected to modify the
$_ string in Perl for at least some of the filenames specified. If a given filename is not
modified by the expression, it will not be renamed. If no filenames are given on
the command line, filenames will be read via standard input.
예를 들어 확장자가 “* .bak”인 모든 파일의 이름을 바꾸려면 다음과 같이 말할 수 있습니다.
rename 's/\.bak$//' *.bak
대문자 이름을 더 낮은 이름으로 변환하려면
rename 'y/A-Z/a-z/' *
답변
이 답변에는와 같은 이단을 제외하고 다른 모든 답변의 좋은 부분이 포함되어 있습니다 ls | while read
.
현재 디렉토리 :
for file in ACDC*.xxx; do
mv "$file" "${file//ACDC/AC-DC}"
done
하위 디렉토리 포함 :
find . -type f -name "ACDC*" -print0 | while read -r -d '' file; do
mv "$file" "${file//ACDC/AC-DC}"
done
줄 바꿈 문자는 실제로 파일 이름에 포함되지 않으므로 공백이 포함 된 이름으로 작업하는 동안 더 간단 할 수 있습니다.
find . -type f -name "ACDC*" | while read -r file; do
mv "$file" "${file//ACDC/AC-DC}"
done
답변
rename
Phil 의 util-linux 버전을 사용하려면 (Ubuntu에서는이라고 함 rename.ul
) :
rename ACDC AC-DC ACDC*
또는
rename.ul ACDC AC-DC ACDC*
답변
bash 쉘 사용
find . -type f -name "ACDC*" -print0 | while read -d $'\0' f
do
new=`echo "$f" | sed -e "s/ACDC/AC-DC/"`
mv "$f" "$new"
done
참고 : using find
은 현재 디렉토리와 그 아래 디렉토리를 처리합니다.
답변
껍질에 따라 다릅니다. zsh에서는 다음을 수행합니다.
for file in ACDC*.xxx; do
mv "$file" "$(echo $file | sed -e 's/ACDC/AC-DC/')"
done
아마도 최상의 솔루션은 아니지만 작동합니다.
답변
bash 사용 :
ls *.xxx | while read fn; do
mv "${fn}" "${fn/ACDC/AC-DC}";
done
당신이있는 경우 rename
프로그램이 설치 :
rename 's/ACDC/AC-DC/' *.xxx