이로 인해 용량이 LIST
매우 커집니다(단시간에 몇 GB까지 커지는 경우 등).
$ for i in *; do echo $i; cut -d ' ' -f1 $i ; done > LIST
예를 들어 10초 후:
$ wc -l LIST
132654955 LIST
$ ls -hl LIST
-rw-r--r-- 1 user users 2.3G Jan 22 21:35 LIST
LIST
그 이유는 처리해야 할 파일 목록에 추가되어 처리가 완료되지 않기 때문인 것 같습니다 cut
. 이 문제에 대한 3가지 해결책을 찾았습니다.
LIST
처리에서 제외:for i in !(LIST); do echo $i; cut -d ' ' -f1 $i ; done > LIST
다른 디렉토리를 사용하십시오
LIST
:for i in *; do echo $i; cut -d ' ' -f1 $i ; done > /tmp/LIST
*
루프를 실행하기 전에 무엇이든 확장C-x *
하거나 표시합니다.$ bind -p | grep glob-expand-word
내 추론이 맞나요? 어떤 방법이 가장 좋나요?
답변1
당신의 추론이 정확합니다.
귀하가 제안한 솔루션 중에서 저는 처음 두 가지, 특히 두 번째 솔루션을 선호합니다. 왜냐하면 다른 디렉토리에 있는 파일에 쓰는 것이 더 깔끔해 보이기 때문입니다.
변수를 사용하는 또 다른 옵션은 다음과 같습니다 GLOBIGNORE
(쉘이 이를 지원한다고 가정).
GLOBIGNORE=LIST ## "LIST" file will be ignored while globbing
for i in *; do echo "$i"; cut -d ' ' -f1 "$i"; done >LIST
답변2
폴더의 모든 파일에 대해 활동을 수행하고 출력 파일을 동일한 폴더에 넣는 것은 현명한 접근 방식이 아니라고 생각합니다. 내 >
출력 리디렉션은 /tmp
출력을 위한 공간이 충분하지 않다는 것을 알지 않는 한 항상 으로 끝납니다. 그런 다음 더 적합한 파일 시스템을 찾습니다. 하지만 입력 파일을 처리하는 디렉터리에 절대 넣지 마세요.