it-swarm.dev

찾기 디렉토리 이름 목록을 가져옵니다

디렉토리 이름 목록을 얻기 위해이 작업을 수행 할 수 있다는 것을 알고 있습니다.

find . -type d -maxdepth 1 

결과는 다음과 같습니다.

.
./foo
./bar

./없이 목록을 선호합니다. 원시 이름 만 출력하는 방법이 있습니까?

형식을 지정하기 위해 목록을 통계로 보내려고했지만 동일한 결과를 얻습니다.

find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
40
joachim

GNU find를 사용하면 -printf 옵션 :

find . -maxdepth 1 -type d -printf '%f\n'

주석에서 Paweł가 언급했듯이 현재 디렉토리를 나열하지 않으려면 -mindepth 1, 예 :

find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
44
Thor

최신 정보:

더 짧은 대안 :

 find . -maxdepth 1 -type d | cut -c 3-

슬래시없이 한 줄에 하나씩 이름을 제공합니다.

18
Levon

GNU 찾기를 사용하면 -mindepth를 사용하여 찾기가 현재 디렉토리와 일치하지 않도록 할 수 있습니다.

find . -type d -maxdepth 1 -mindepth 1

이 작업을 재귀 적으로 수행하지 않기 때문에 bash glob을 사용할 수 있습니다.

echo */

Glob에 후행 /를 추가하면 디렉토리 만 일치합니다.

9
jordanm

차라리 사용하고 싶습니다 :

 find ./ -type d -maxdepth 1 -exec basename {} \;
6
user1293137

sed에서이 두 문자를 제거하십시오.

find . -maxdepth 1 -type d | sed -e 's/^\.\///'
6
Birei

나는 보통 다음을 사용합니다.

find * -type d

그러나 그것이 당신이 원하는 것을하는 올바른 방법인지는 모르겠습니다.

2
Francesco Turco

AIX에서는 'maxdepth'매개 변수가 작동하지 않습니다.

일반적으로 이것은 나를 위해 작동합니다.

find ./ -type d | cut -d"/" -f2 | sort -u

0
user1656294

당신이 찾고있는 것은 basename입니다. 유닉스 디렉토리 구조를 무시합니다.

아래 예 :

find /any/path/you/want -maxdepth 1 -type d -exec basename {} \;

명령을 실행하기 전에 cd에 대한 필요성을 제거하여 dir 경로조차도 출력에서 ​​제외합니다.


일부 추가 정보 :

-exec 대신 인수로 찾기 | (pipe) 출력에 대한 다른 명령 (두 번째 명령을 피하는 것은 각 출력 행을 넘어 가며 출력에 따라 스크립트의 성능을 향상시킬 수 있다고 말함)

참고 : find 옵션은 위치가 아님입니다 (-maxdepth는 이전에 지정된 테스트와 이후에 지정된 테스트에 영향을 미침).

0
gonzalesraul