Bash에서 알파벳 반복


82

mv'x'로 시작 하는 모든 파일을 'x'디렉토리에 저장 하고 싶습니다 . 같은 것 :

mv path1/x*.ext path2/x

모든 알파벳 문자 a, ..., z에 대해 수행하십시오.

알파벳을 통해 'x'루프를 만드는 bash 스크립트를 어떻게 작성할 수 있습니까?

답변:


139
for x in {a..z}
do
    echo "$x"
    mkdir -p path2/${x}
    mv path1/${x}*.ext path2/${x}
done

1
왜 네 번째 줄과 다섯 번째 줄에서 중괄호로 x를 묶었는지 물어봐도 될까요?
Jiaqi Li

여기에서는 필요하지 않지만 잘 작동하며 매개 변수를 더 돋보이게합니다.) gnu.org/software/bash/manual/…
Kamil Dziedzic

1
일반적으로 "$x"그것을 돋보이게 만드는 데 충분하고 더 나은 방법입니다.
Weijun Zhou

39

시작해야합니다.

for letter in {a..z} ; do
  echo $letter
done

20

중첩 중괄호 확장을 사용하여 스페인어 알파벳을 생성하는 방법은 다음과 같습니다.

for l in {{a..n},ñ,{o..z}}; do echo $l ; done | nl
1  a
 ...
14  n
15  ñ
16  o
...
27  z

또는 간단히

echo -e {{a..n},ñ,{o..z}}"\n" | nl

사용하지 않는 29 자 스페인어 알파벳 을 생성하려는 경우

echo -e {{a..c},ch,{d..l},ll,{m,n},ñ,{o..z}}"\n" | nl

프랑스어 알파벳이나 독일어 알파벳도 비슷합니다.


3

사용 rename:

mkdir -p path2/{a..z}
rename 's|path1/([a-z])(.*)|path2/$1/$1$2' path1/{a..z}*

파일 이름에서 선행 [az] 문자를 제거하려는 경우 업데이트 된 perlexpr은 다음과 같습니다.

rename 's|path1/([a-z])(.*)|path2/$1/$2' path1/{a..z}*

2

대문자로도

for letter in {{a..z},{A..Z}}; do
  echo $letter
done

1

이 질문과 답변은 부분적으로 내 문제에 도움이되었습니다. bash 에서 알파벳일부
확대 해야했습니다 .

확장 은 엄격하게 텍스트 이지만

해결책을 찾았고 더 간단하게 만들었습니다.

START=A
STOP=D
for letter in $(eval echo {$START..$STOP}); do
    echo $letter
done

결과 :

A
B
C
D

내가 해결해야했던 동일한 문제를 찾는 사람에게 도움이되기를 바라며 여기에서도 끝납니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.