
폴더 안의 디렉터리 목록을 가져와서 목록을 실행 파일로 출력하고 이를 사용하여 무언가를 실행하고 싶습니다.
이 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 ..... {} +;