라는 디렉토리가 있습니다 uploads
. 여기에는 여러 파일과 파일이 포함된 일부 하위 디렉터리가 포함되어 있습니다.
다음을 한 단계로 수행할 수 있는 방법이 있습니까?
루트 업로드 디렉터리에 있는 파일만 나열합니다. 하위 폴더 이름이나 해당 내용을 보고 싶지 않습니다.
그리고
다음으로 시작하는 파일을 나열하지 마십시오.
t_
나는 -d
그 깃발을 이해하지만, 내가 원하는 것을 얻지는 못합니다.
답변1
이것은 직업처럼 들리네요 find
.
-maxdepth
하위 폴더 내에서 재귀적으로 검색하는 대신 현재 디렉터리만 반환하는 데 사용됩니다.-type f
디렉터리나 장치 노드 또는 기타 항목이 아닌 파일만 반환하는 데 사용됩니다 .-not
-name
원하지 않는 이름의 파일을 피하려면 if와 조합을 사용하세요.
다음과 같이 합쳐질 수 있습니다.
find /path/to/uploads -maxdepth 1 -type f -not -name 't_*'
답변2
GNU ls(즉, 내장되지 않은 Linux 시스템 및 Cygwin의 ls 명령과 일부 다른 unices에서도 사용 가능)에는 이름을 기준으로 특정 파일을 숨기는 옵션이 있습니다. 그러나 디렉토리를 무시할 수 있는 방법은 없습니다.
ls --hide='t_*' uploads
또 다른 방법은 쉘이 일치하도록 하는 것입니다. Bash, ksh 및 zsh에는 !(t_*)
일치하는 파일을 제외한 모든 파일과 일치하는 네거티브 패턴이 있습니다 t*
. bash에서는 이 기능을 활성화해야 하며 shopt -s extglob
, zsh에서는 이 기능을 활성화해야 합니다 setopt ksh_glob
. Zsh에는 또한 ^t_*
사용해야 하는 동등한 구문이 있습니다 setopt extended_glob
. 이것은 여전히 디렉토리를 무시하지 않습니다. Zsh에는 이름뿐만 아니라 메타데이터 등을 기준으로 파일을 일치시키는 추가 기능이 있습니다.글로벌 예선. (.)
일반 파일로 제한하려면 일치가 끝나면 추가하세요 . 부정은 ^
이름 일치 구문의 일부이므로 ^t_*(.)
"일반 파일과 일치하지 않는 모든 파일 t_*
"이 아니라 "일치하지 않는 모든 일반 파일 t_*
"을 의미합니다.
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
고급 도구가 없다면 를 실행할 수 있습니다 find
.Caleb은 GNU find를 사용하여 이를 수행하는 방법을 보여주었습니다.. 이 옵션은 이식 가능하지 않습니다. 이식 가능하게 재귀를 중지하는 데 -maxdepth
사용할 수 있습니다 .-prune
find
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
-print
파일에서 -exec ls -lG -- {} +
원하는 옵션을 수행 하려면 로 바꾸십시오 .ls
위의 모든 명령은 도트 파일(예: 이름이 로 시작하는 파일 .
)을 숨깁니다. 이를 표시하려면 에 전달 하거나 -A
zsh() 에 ls
glob 한정자를 추가하세요 . 를 사용하면 다른 방법을 사용하여 한 수준만 재귀적으로 만들 수 있습니다(점 파일을 특별히 처리하지 않음). 이는 현재 디렉터리에서 실행 중인 경우에만 완전히 작동합니다.D
ls uploads/^t_*(.D)
find
find
find
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print
답변3
ls -l /folder | grep ^- | awk '{print $9}'
답변4
나는 다음과 같은 짧은 방법을 찾았습니다.
ls -p uploads | grep -Ev '/'
또는
ls -pIt_* uploads | grep -v /