Bash에서 디렉토리와 출력을 나열하는 방법

Bash에서 디렉토리와 출력을 나열하는 방법

폴더 안의 디렉터리 목록을 가져와서 목록을 실행 파일로 출력하고 이를 사용하여 무언가를 실행하고 싶습니다.

이 bash 파일에는 내 내부의 폴더 목록이 필요합니다 $directory. 폴더 목록은 @sub1, @sub2, @sub3, 때로는 최대 30개까지 이어집니다. 모든 하위 폴더에는 기호가 추가됩니다 @.

현재 하위 폴더를 목록에 수동으로 추가하고 로 호출됩니다. -sub="$subs"여기서 subs는 위에서 subs="$directory/@sub1;$directory/@sub2;... 등 으로 정의됩니다.

실행 파일이 빌드되는 방식을 유지하려면 출력에 대해 동일한 형식을 유지해야 합니다.

이를 자동화하는 가장 좋은 방법은 무엇입니까? 조금 이상하다면 죄송합니다. 여기서 첫 번째 질문입니다.

답변1

가능한 해결책:find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog

시작하려면 빈 폴더, 우리가 원하지 않는 파일인 @subX라는 몇 개의 폴더가 필요합니다.

mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..

. find​ls 출력을 구문 분석하는 대신 이것을 사용하십시오.

첫 번째 인수는 검색할 폴더입니다(예: find .현재 디렉터리).

-type d디렉터리만 필터링합니다(파일 없음).

-name '@*'@로 시작하는 모든 일치

-print0결과를 표준 출력으로 인쇄합니다. -print도 작동하지만 -print0은 공백 등의 경우 특별한 작업을 수행합니다.

-maxdepth 1하위 폴더는 검색하지 마세요)

find . -type d -name '@*' -print0 -maxdepth 1위의 설정 결과 :

./@sub1./@sub2./@sub3

참고로 이 접두어에는 ./가 붙는데 이는 문제가 될 수도 있고 아닐 수도 있습니다.

또한 읽어 볼 가치가 있습니다: find의 -exec 옵션과 find ..... {} +;

관련 정보