모두 이름을 바꾸고 싶어요목차동일한 디렉터리에서 디렉터리가 패턴과 일치하는 경우 찾을 패턴은 다음과 같습니다. user1 [files.sentfrom.com] -
예: 디렉터리 이름은 다음과 같습니다.
user1 [files.sentfrom.com] - Directory-Subject
디렉터리 이름을 다음으로 바꾸고 싶습니다.
Directory-Subject (this could have different type of text)
이것은 디렉터리 이름을 바꾼 후의 이미지입니다. 디렉터리에 있는 다른 폴더나 파일의 이름은 바뀌지 않습니다.
정규식을 사용하여 한 번에 이 작업을 수행할 수 있습니까? 아니면 for 루프가 필요합니까? 나는 또한 다른 방법으로 열려 있습니다.
감사해요
답변1
for name in *\[*\]\ -\ *; do
if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
mv "$name" "${name#* - }"
fi
done
위의 루프는 작동 bash
하거나 ksh93
적어도 파일 이름 와일드카드 패턴 *\[*\]\ -\ *
(대괄호와 공백은 쉘에서 이스케이프해야 함)과 일치하는 현재 디렉터리의 모든 이름을 반복하고 해당 디렉터리가 디렉터리이고 수정된 디렉터리를 사용할 수 있는지 확인하기 위해 테스트합니다. 이름이 아직 존재하지 않습니다. 모든 것이 순조롭게 진행되면 디렉토리 이름이 변경됩니다.
매개변수 확장은 ${name#* - }
변수의 값을 가져와서 변수의 시작 부분부터 첫 번째 발생 부분(공백-대시-공백)까지 모든 것을 name
제거합니다 .␣-␣
답변2
다음을 위해 사용할 수 있습니다 rename
:
rename 's/.* ([^ ]*)$/$1/' *
마지막 공백까지 디렉토리의 모든 파일 이름에서 모든 문자를 제거합니다.
답변3
찾기 및 이름 바꾸기는 강력한 팀입니다. 이 -0
옵션을 사용하면 가능한 모든 파일 이름이 깔끔하게 처리됩니다.
find -maxdepth 1 -type d -print0 | xargs -0 rename s/.*Directory-/Directory-/