
이름이 있는 파일이 포함된 폴더와 하위 폴더가 많이 있습니다. 하위 문자열을 억제하기 1. Introduction--- [ FreeCourseWeb.com ] ---.mp4
위해 모든 파일의 이름을 재귀적으로(폴더 및 하위 폴더) 바꾸고 싶습니다 .1. Introduction.mp4
--- [ FreeCourseWeb.com ] ---
답변1
이름 시작 부분에 숫자가 있는 모든 파일의 이름을 바꾸려고 한다고 가정하면 하위 문자열이 두 번 포함 되고 바로 이름 끝 부분이 ---
뒤따릅니다 . 또한 이러한 하위 문자열 자체를 포함하여 .mp4
두 하위 문자열 사이의 비트를 제거한다고 가정합니다 .---
find . -type f -name '[[:digit:]]*---*---.mp4' -exec sh -c '
for pathname do
mv -i "$pathname" "${pathname%---*---.mp4}.mp4"
done' sh {} +
이는 현재 디렉토리 또는 그 아래에서 주어진 패턴과 일치하는 이름을 가진 모든 일반 파일을 찾은 다음 일치하는 접미사 문자열을 제거 ---*---.mp4
하고 .mp4
접미사를 다시 추가합니다.
find
(in )을 사용하지 않고 bash
:
shopt -s globstar nullglob dotglob
for pathname in ./**/[[:digit:]]*---*---.mp4; do
[[ ! -f $pathname ]] && continue
mv -i "$pathname" "${pathname%---*---.mp4}.mp4"
done
이는 기본적으로 명령과 동일 find
하지만 심볼릭 링크의 이름도 변경됩니다. 시작 시 설정된 세 가지 셸 옵션은 **
하위 디렉터리까지 반복적으로 일치하는 데 사용되는 globbing 패턴을 활성화하고( globstar
) 일치하지 않는 패턴이 확장되지 않은 상태로 유지되는 대신 삭제되도록 하며( nullglob
) globbing 패턴이 숨겨진 이름과 일치하는지 확인합니다( dotglob
).
셸 에서 zsh
:
for pathname in ./**/[[:digit:]]*---*---.mp4(.ND); do
mv -i $pathname ${pathname%---*---.mp4}.mp4
done
여기서 glob 한정자의 점은 (.ND)
이전 패턴이 일반 파일과만 일치하도록 만드는 반면 N
및 는 및 in 을 D
활성화하는 것처럼 작동 하지만 이 특정 패턴에 대해서만 작동합니다.nullglob
dotglob
bash
답변2
rename
패키지 도구 util-linux
(때때로 라고도 함 rename.ul
) 및 다음을 사용합니다 find
.
find . -type f -name '*--- \[ FreeCourseWeb.com \] ---.mp4'\
-exec rename -i -- '--- [ FreeCourseWeb.com ] ---' '' {} \;
옵션은 -i
기존 파일을 덮어쓸 수 있는 권한을 요청합니다.
Larry Wall의 Perl rename
스크립트를 사용하여 다음을 수행합니다 find
.
find . -type f -name '*--- \[ FreeCourseWeb.com \] ---.mp4'\
-exec rename 's/--- \[ FreeCourseWeb.com \] ---//' {} \;
-f
/ --force
옵션을 사용 하지 않으면 기본적으로 기존 파일을 덮어쓰지 않습니다 . 대신 오류 메시지가 표시됩니다 ... already exists
.