명령을 사용하여 디렉터리와 해당 하위 디렉터리의 모든 파일을 찾고 출력을 result.txt 파일로 리디렉션하면 result.txt 파일에서 result.txt를 포함한 모든 파일을 얻을 수 있지만 원하지 않았습니다. 결과.txt.
내가 하는 것처럼
find . -type f > allfiles.txt
결과적으로 내가 얻는 것은
./test1/test3/file4
./test1/file3
./test2/test4/file6
./test2/file5
./allfiles.txt
이 상황을 피하는 방법은 무엇입니까?
답변1
구체적으로 find
다음과 같이 할 수 있습니다.
find . ! -path ./allfiles.txt -type f > allfiles.txt
보다 일반적으로는 moreutils 명령을 사용하여 명령이 반환될 때까지 출력 파일 생성을 지연할 수 있습니다 sponge
.
ls -lRA | sponge allfiles.txt
그러나 이는 전체 출력을 메모리에 저장하는 것을 의미합니다.
moreutils가 설치되지 않은 경우(일반적으로 기본적으로 설치되지 않음) 다음과 같이 구현할 수 있습니다 sponge
.
sponge() {
perl -0777 -e '$text=<STDIN>;
open STDOUT, ">", shift or die$!;
print $text' -- "$@"
}
답변2
즉, find가 실행되는 동일한 디렉토리에 allfiles.txt 파일을 넣지 마십시오. 다음과 같이 다른 곳에 넣으세요.
find . -type f > /tmp/allfiles.txt
또는 동일한 디렉터리에 있어야 하는 경우 grep을 사용하여 필터링합니다.
find . -type f | grep -vxF ./allfiles.txt > allfiles.txt
(다른 파일이 ./foo\n./allfiles.txt
호출되지 않는다고 가정)