for 루프에 여러 디렉터리를 입력하고 싶습니다. 디렉토리의 전체 이름은 없고 일부만 알고 있습니다.
나는 당신이 터미널에 쓴 것과 같은 것을하고 싶습니다.cd *IncompleteDirName*
이것은 루프의 MVE입니다: IncompleteDirName
get from file IncompleteDirNames
.
cont=1
sum=1
while read anotherFILE; do
IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames)
cd *"${IncompleteDirName}"*
# Do stuff
cd ..
cont=$((cont + sum))
done <anotherFILE
이것은 작동하지 않습니다. 와일드카드가 확장되지 않거나 변수가 제대로 작동하지 않는 것과 관련이 있는지는 알 수 없습니다.
다음과 같은 오류 메시지가 표시됩니다.
*: 해당 파일이나 디렉터리가 없습니다.
나는 이것이 별표가 예상대로 작동하지 않는다는 것을 의미한다고 생각합니다. 디렉터리로 들어가지 않으며, 각 패턴과 일치하는 디렉터리가 하나씩 있습니다. 어쨌든 디렉토리가 입력되지 않았습니다.
파일은 다음과 같습니다 IncompleteDirNames
.
Alicante
Almeria
Andalucia
Avila
이것은 이름의 목록입니다. 위의 s에 해당하는 디렉터리 이름은 다음과 같습니다 IncompleteDirName
.
aa4fas_Alicante_com
mun_Almeria
comunidadde_Andalucia
ciuAvila
답변1
스크립트의 이 부분은 확실히 작동합니다. 다음 테스트 스크립트를 실행하면 쉽게 찾을 수 있습니다.
#/bin/sh
cd
IncompleteDirName="ment"
cd *"${IncompleteDirName}"*
date > testFile
첫 번째 줄은 shebang입니다. 두 번째 줄은 홈 디렉터리로 전환됩니다. 라는 폴더가 있어야 합니다 Documents
. 세 번째 줄에서는 변수를 IncompleteDirName
의 하위 문자열로 정의합니다 Documents
. 네 번째 줄은 스크립트에서 복사됩니다. 다섯 번째 줄은 현재 데이터를 파일의 현재 위치에 씁니다 testFile
.
폴더 testFile
에 파일이 나타나는 것을 볼 수 있습니다 Documents
.
Rakesh Sharma가 이미 답변이나 사용 방법에서 지적했듯이 문제는 스크립트에서 다를 수 있습니다. 가능한 시나리오는 다음과 같습니다.
- 일부 캐릭터는 비슷하거나 동일하게 보입니다. 예를 들어
Α
라틴어가 아닌 대문자 알파입니다A
. 이 페이지에서 검색A
하고 모든 결과를 강조 표시 하면A
해당 결과가 강조 표시되지만Α
강조 표시되지는 않습니다. 마찬가지로, 디렉터리 이름의 하위 문자열이라고 생각하는 것이 실제로는 디렉터리 이름의 하위 문자열이 아니기 때문에 일치하는 항목이 없을 수도 있습니다. - 대문자 사용 문제. Windows 세계 출신이라면 대소문자는 중요하지 않습니다.
A
and(또는 이에 상응하는 Windows)라는 디렉터리를 가질 수cd a
있으며 해당 디렉터리로 이동합니다. 단점은A
Windows 시스템에서 디렉토리를 호출하면a
동일한 디렉토리 내의 디렉토리를 호출할 수 없다는 것입니다. Unix 시스템에서는 이것이 적용되지 않습니다. 첫 번째 문자가 대문자로 표시되지 않기 때문에 (실제로 홈 폴더에 디렉터리 이름이 없는cd ~/documents
경우) 컴퓨터에서는 실패할 수 있습니다 .documents
하지만 내 예제 스크립트에서 볼 수 있듯이 스크립트의 이 부분은 확실히 작동합니다.