일반적인 형식으로 이름이 지정된 여러 파일의 이름을 바꾸고 싶습니다.
text1 text2 [firstname.lastname] text3 ... textn.ext
파일 이름에서 텍스트를 제거 하고 싶습니다 [firstname.lastname]
. 작업을 단순화하려면 [firstname.lastname]
모든 파일에 대해 이름과 성이 고정되어 있다고 가정합니다.
Ubuntu 12.04를 사용하고 있으며 다음 명령을 시도했습니다.
$ find . -name "*.ext" -print | xargs sed -i 's/[firstname.lastname]//g'
하지만 작동하지 않습니다.
답변1
Bash 와일드카드를 사용하세요.
for i in *.ext; do
echo mv -nv -- "$i" "${i/firstname.lastname/}"
done
만족스러우면 에코를 삭제하세요.
하위 디렉토리로 이동해야 하는 경우:
shopt -s globstar
for i in **/*.ext; do
echo mv -nv -- "$i" "${i/firstname.lastname/}"
done
echo
만족스러우면 제거하세요.
사용 find
:
find . -name '*.ext' -exec bash -c 'echo mv -nv -- "$0" "${0/firstname.lastname/}"' {} \;
echo
만족스러우면 제거하세요.
이름을 바꿀 수 있는 방법은 어떻습니까? 모든 형태의 패턴을 제거합니다 (따라서 파일 이름의 또는 를 xxx.yyy
제거합니다 ). 이를 위해(첫 번째 방법 사용):firstname.lastname
john.doe
james.brown
shopt -s extglob
for i in *.ext; do
echo mv -nv -- "$i" "${i/+([[:graph:]])\.+([[:graph]])/}"
done
아니면 두 번째 방법을 사용하세요:
shopt -s globstar extglob
for i in **/*.ext; do
echo mv -nv -- "$i" "${i/+([[:graph:]])\.+([[:graph:]])/}"
done
또는 다음 find
방법을 사용하십시오.
find . -name '*.ext' -exec bash -c 'shopt -s extglob; echo mv -nv -- "$0" "${0/+([[:graph:]])\.+([[:graph:]])/}"' {} \;
firstname.lastname
패턴이 항상 공백 사이에 포함되어 있는 경우 패턴 대체를 사용할 수도 있습니다.
"${i/*([[:space:]])+([[:graph:]])\.+([[:graph:]])*([[:space:]])/ }"
그래서 한 칸만 남게 됩니다.
노트.이 모든 방법은 공백 및 기타 흥미로운 기호가 포함된 파일 이름에 대해 100% 안전합니다.