FreeBSD의 `ls -R` 명령에서 디렉토리 제외

FreeBSD의 `ls -R` 명령에서 디렉토리 제외

FreeBSD 9.2의 디렉토리에 있는 모든 파일을 나열하고 싶지만 특정 디렉토리를 포함하고 싶지는 않습니다. 에 대한 -I및 매개변수를 모두 확인했지만 슈퍼유저 모드만 무시하고 지원 되지 않습니다.--ignorelsI--ignore

ls다른 명령(예: )을 사용하여 이를 사용하거나 수행하는 방법을 아는 사람이 있습니까 grep?

답변1

특정 디렉토리에 있는 파일을 제외한 모든 파일을 나열하려면 다음 과 같이 명령을 notHere사용하면 됩니다 .find

find . -path ./notHere -prune -o -type f -print

설명:

  • .find: in을 시작할 디렉토리
  • -path ./notHere: 경로와 일치하는 규칙을 시작합니다../notHere
  • -prune: find현재 일치하는 디렉터리로 내려가는 것을 방지합니다.
  • -oor: 첫 번째 규칙이 일치하지 않는 경우 발생하려는 작업을 지정하려면 추가하세요.
  • -type f: 디렉토리가 아닌 파일만 일치합니다(디렉토리 항목도 보려면 이 항목을 제거하세요).
  • -print: 기본 작업이므로 필요하지 않은 경우가 많지만 의 일부 버전에서는 find여전히 결과를 인쇄하고 싶다고 명시적으로 명시하기를 원합니다.

ls -ll파일 이름 목록이 아닌 다른 출력(특히 )을 원한다고 언급했습니다 . find에 대한 특정 옵션은 아니지만 종종 이를 지원하는 내장 기능이 있습니다 ls. -print위의 플래그를 다음으로 바꾸고 -ls해당 옵션 세트가 ls충분히 가까운지 확인할 수 있습니다.

find . -path ./notHere -prune -o -type f -ls

또는 이것이 충분하지 않은 경우 find다음과 같이 출력을 별도로 처리하는 대신 원하는 명령을 실행할 수 있습니다.

find . -path ./notHere -prune -o -type f -exec ls -ll {} +

답변2

이 스크립트를 사용하여 이름이 '_'로 시작하는 모든 폴더를 필터링합니다. 공백이 있는 폴더에서는 작동하지 않을 수도 있지만 수정할 수는 있습니다.

#!/bin/sh

A=`ls /j/ | xargs | sed 's/_[a-z0-9]*//g' | awk '{$1=$1;print}'`
W=`echo $A | wc -w | tr -d '[[:space:]]'`
echo $W

일반적으로 흥미로운 부분은 다음과 같습니다.

ls some_folder | xargs | sed 's/_[a-z0-9]*//g'

정규식에는 _[a-z0-9]*제외되어야 하는 이름과 일치하는 패턴이 포함되어 있습니다.

-a옵션 없이(이름만) 폴더 목록을 원하는 경우입니다 . 사용하려면 -a가장 간단한 방법은 다음과 같습니다.

ls -la | grep -v skip_folder

skip_folder제외하려는 이름은 어디에 있습니까? 폴더에 공백이 포함되어 있으면 따옴표를 사용하세요. 예:

ls -la | grep -v "skip folder"

관련 정보