2014-05-18 1 views
-1

에서 사용하는 내가 할 수 있을까?배쉬 잡는 디렉토리 이름은 내가, 예를 들면 각</p> <p>의 tar.gz 파일을 만들 directorys의 이름을 잡기 위해 시작과 함께 모든 directorys을 원하는 루프

+0

'find'를 사용하여 디렉토리를 가져 옵니까? – devnull

+1

'for dir in * /;를 사용하여 디렉토리를 반복 할 수 있습니다. echo "$ dir"; done' –

+0

"모든 디렉토리"란 무엇을 의미합니까? 파일 시스템의 모든 디렉토리? 특정 폴더의 모든 디렉토리? 특정 폴더 아래의 모든 디렉토리? – ruakh

답변

2

이렇게하면 각 A* 디렉토리에 대한 tarball이 생성됩니다.

for dir in A*/; do 
    tar -cf "${dir%/}".tar.gz "$dir" 
done 

와일드 카드는 루프 오버 할 디렉토리 이름 목록으로 확장됩니다. 일치 항목을 디렉토리로 설정하는 후행 슬래시가 확장에 포함됩니다. 우리는 간단한 변수 치환 (${variable%suffix})이있는 경우 변수 값으로 끝까지 잘라내어 끝 부분에서 잘라내어 ${variable#prefix}과 다른 많은 대체 문자를 사용하여 쉘 변수를 확장합니다 (쉘의 설명서 페이지 참조).

큰 따옴표는 공백이있는 파일 이름이없는 한 스크립트없이 작동합니다. 이것은 많은 쉘 스크립팅 자습서 에서조차 공통적 인 감독입니다.

1

당신이해야 할 일을 정확히 분명하지 않다, 그러나 여기에 구축하는 일부 비트 있습니다

: 특정 문자로 시작하는 모든 디렉토리를 찾을 수

find -maxdepth 1 -type d 

: 모든 디렉토리 찾아

find -maxdepth 1 -type d -name 'X*' 

이제 첫 글자의 목록을 볼 수 있습니다.

for n in `find -maxdepth 1 -type d`; do echo ${n:2:1}; done | sort -u 

마지막으로 해당 문자로 타르를 수행하십시오.