좀 더 자세히 설명할 필요가 있어요. 이 명령은 실제로 BBS FTN 투척자를 위한 것입니다. 이러한 명령이 있는 구성 파일에서는 특정 선언만 허용됩니다. 여기 몇 가지 예가 있어요.
exec "/home/imp/imp/poll.sh" *.su? *.mo? *.tu? *.we? *th? *.fr? *.sa? *.pkt
flag toss!.now [0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z][0-9a-Z].???
exec "/home/imp/imp/poll.sh /home/imp/hpt/secure" /home/imp/hpt/secure/*.[STFWMstfWM][ouaherOUAHER][0-9A-ZA-a] *.[pP][kK][tT]
이것이 바로 내가 해당 구문([0-9a-z](예:))을 사용하고 싶은 이유입니다. 문제는 메일 프로그램이 소문자 파일 이름을 찾고 있지만 대문자 파일 이름만 존재한다는 것입니다.
다음 구문을 사용하여 파일을 대문자에서 소문자로 변환하려고 합니다.
mv /home/imp/hpt/outbound/[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z].[STFWMfWM][OUAHER][0-9] /home/imp/hpt/outbound/[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z].[stfwm][ouaher][0-9a-za-a]
내 구문이 잘못된 것 같아요.
다음은 이름을 바꾸려는 파일 이름의 예입니다.
0000FE70.FR0
모든 도움에 크게 감사드립니다. 감사해요.
답변1
한 유형의 문자를 다른 유형의 문자로 변경하려면 를 사용하십시오 tr
.
for f in *; do
test -f "$f" && echo mv "$f" "$( tr '[:upper:]' '[:lower:]' <<<"$f" )"
done
이 스크립트는 현재 디렉터리의 모든 파일 이름을 모두 소문자로 바꿉니다. 디렉토리를 건너뜁니다. echo
요구 사항을 충족한다고 확신하면 제거하세요. 표준 ASCII 파일 이름만 있는 경우(참고: 대신) [:upper:]
및를 각각 [:lower:]
으로 바꿀 수 있습니다 A-Z
.a-z
A-Z
[A-Z]
또는 Bash의 내장 변수 대체를 대문자에서 소문자로 사용하세요.
for f in *; do
test -f "$f" && echo mv "$f" "${f,,}"
done
답변2
이 답변Stack Overflow의 Alex B는 디렉터리 아래의 파일 및 하위 폴더 이름을 바꾸는 데 도움을 줍니다.
여기에는 find
Linux rename
명령 사용이 포함됩니다. 위 링크에 제공된 명령이 디렉터리 이름도 수정한다는 점을 추가하고 싶습니다. 파일 이름만 변경하려면 -depth
다음 옵션을 변경해야 합니다 -type f
.
이 명령에 대한 또 다른 정규식은 rename
다음과 같습니다. 이해하기 더 쉽다고 생각합니다.
find my_root_dir -type f -execdir rename 'y/A-Z/a-z/' {} \;
rename
명령 정규식과 중괄호 사이에는 필수 공백이 있고, 이들과 명령 종료 문자 사이에도 공백이 있습니다.\;
my_root_dir
또한 명령을 실행하는 디렉터리(directory )의 모든 파일 이름뿐만 아니라 해당 디렉터리에 포함된 모든 하위 폴더 아래의 모든 파일 이름도 변경된다는 점을 명심하세요 . -maxdepth 0
명령의 옵션을 사용하여 find
시작 지점 자체에만 테스트와 작업을 적용하도록 강제할 수 있습니다.
답변3
그리고 zsh
:
autoload zmv # best in ~/.zshrc
zmv '[[:alnum:]](#c8).[STFWMfWM][OUAHER][0-9]' '${(L)f}'
이를 위해서는 잠재적인 충돌을 확인해야 합니다.
답변4
rename-lower
현재 디렉토리에 대한 간단한 스크립트입니다. rename
명령이 작동하지 않으면 mv에서 변경할 수 있습니다.
#/bin/bash
# script to replace all upper case to lower case
for i in *
do
d=$(echo ${i} |tr [:upper:] [:lower:]);
if [ ${d} != ${i} ]
then
echo "renaming:" ${i} ${d}
rename ${i} ${d} ${i}
# mv ${i} ${d}
fi
done
예
$ ls
tmp.EwcM2s6kfU tmp.kcUX6rtjiu tmp.kzpqLvWcnQ tmp.N1H8bLt1at
$ rename-lower
renaming: tmp.EwcM2s6kfU tmp.ewcm2s6kfu
renaming: tmp.kcUX6rtjiu tmp.kcux6rtjiu
renaming: tmp.kzpqLvWcnQ tmp.kzpqlvwcnq
renaming: tmp.N1H8bLt1at tmp.n1h8blt1at