시스템의 모든 파일 이름을 나열하는 방법 [닫기]

시스템의 모든 파일 이름을 나열하는 방법 [닫기]

시스템의 모든 파일을 검사하고 싶습니다. 이렇게 하려면 시스템의 모든 파일에 대한 전체 경로가 필요합니다. 내 초기 아이디어는 다음과 같이하는 것이 었습니다.

for file in $(sudo find / ); do
   if [ -d $file ]; then

and so on.

그러나 find의 출력을 이런 방식으로 처리하는 것은 나쁜 습관이라는 것을 읽었습니다. 그렇다면 옳은 일은 무엇입니까?

(ls -RF | grep "/$"와 같은 것을 시도했습니다. 그러나 이는 디렉토리 이름만 제공하지만 시스템의 모든 파일, 디렉토리 등에 대한 전체 경로가 필요합니다.)

답변1

find의 -exec 옵션을 사용하십시오. 예제 스크립트는 다음과 같이 작성됩니다.

sudo find / -type d -exec myprog {} \;

{}는 발견된 모든 파일(이 경우 디렉터리)로 대체됩니다.

각 항목이 디렉토리인지 일반 파일인지 또는 다른 항목인지에 따라 다른 작업을 수행하려면 해당 논리를 "myprog.sh"에 넣거나 다른 유형 선택으로 find를 여러 번 호출하면 됩니다.

편집: 단일 인스턴스 스크립트 옵션의 경우 myprog를 다음과 같이 작성하십시오.

#! /bin/bash -

while IFS= read -rd '' FILE; do
    if [ -d "$FILE" ]; then
    ...
done

그리고 전화해

find / -print0 | myprog

(지원하지 않는 경우 로 교체하세요 -print0.)-exec printf '%s\0' {} +find-print0

답변2

모든 파일을 인쇄하려면

find / -type f

관련 정보