"ls -l /a/*/b"에서 변수에 대한 확장 경로를 얻는 방법

"ls -l /a/*/b"에서 변수에 대한 확장 경로를 얻는 방법

아래와 같이 폴더 구조를 만들었습니다.

mkdir -p test/f{1..4}/inside

달리는 동안 ls -l test/*/나는 얻었다.


test/f1/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f2/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f3/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f4/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f1/:추가 논리를 수행하기 위해 루프에서 사용할 수 있도록 변수에서 확장된 경로(예: )를 어떻게 얻을 수 있습니까 ?

답변1

"여러 항목"이 포함된 변수를 반복하고 싶지는 않습니다(변수는 단일 항목만 포함할 수 있음). 특히 배열을 지원하는 bash 또는 기타 쉘을 사용하는 경우.

다음과 같이 이러한 디렉터리를 사용하여 배열을 설정할 수 있습니다.

array=( test/*/ )

그런 다음 이를 반복합니다.

$ for item in "${array[@]}"; do printf '\n%s\n' "Current directory: $item"; ls -l "$item"; done

Current directory: test/f1/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f2/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f3/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f4/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

그러나 다음과 같이 직접 반복할 수도 있습니다.

for item in test/*/; do
    #something with "$item"
done

참고: 저는 항상 상대 경로보다는 전체 경로를 사용하는 것을 권장합니다.

for item in /path/to/test/*/; do
    #something with "$item"
done

이는 와일드카드를 사용할 때 특히 안전합니다.

관련 정보