ls의 출력이 두 번 인쇄되는 원인은 무엇입니까?
$find . -exec ls -l {} \;
total 340
-rw-rw-r-- 1 w w 163244 Aug 26 19:25 apt-list--installed.txt
-rw-rw-r-- 1 w w 162078 Aug 26 19:25 apt-list.txt
-rw-rw-r-- 1 w w 29 Aug 27 08:29 df1
-rw-rw-r-- 1 w w 31 Aug 27 08:22 df2
-rw-rw-r-- 1 w w 9 Aug 26 23:24 f1
-rw-rw-r-- 1 w w 5 Aug 26 23:21 f2
-rw-rw-r-- 1 w w 27 Aug 27 11:40 o.txt
-rw-rw-r-- 1 w w 9 Aug 26 23:24 ./f1
-rw-rw-r-- 1 w w 163244 Aug 26 19:25 ./apt-list--installed.txt
-rw-rw-r-- 1 w w 27 Aug 27 11:40 ./o.txt
-rw-rw-r-- 1 w w 5 Aug 26 23:21 ./f2
-rw-rw-r-- 1 w w 162078 Aug 26 19:25 ./apt-list.txt
-rw-rw-r-- 1 w w 29 Aug 27 08:29 ./df1
-rw-rw-r-- 1 w w 31 Aug 27 08:22 ./df2
보시다시피, 이러한 파일은 위 출력에 두 번 나열됩니다. 왜?
답변1
find
이는 찾은 모든 파일과 디렉터리에서 실행하고 디렉터리에서 실행하면 기본적으로 해당 내용을 나열하기 때문에 발생합니다 . 따라서 각 파일은 처리되는 대로 나열됩니다.ls
ls
find
그리고포함된 디렉터리를 처리할 때.
이를 방지하려면 ls
모든 것을 파일로 처리하도록 지시하거나( ls -ld
), 파일이 있는 경우 find
'와 유사한 출력( )을 사용하도록 지시할 수 있습니다. 두 가지 모두 파일과 동일한 방식으로 디렉터리가 별도로 나열되도록 합니다. 파일 형식을 필터링하여 이를 방지할 수 있습니다.ls
find . -ls
예를 들어 -type f
).