난 그냥 bash 스크립트를 사용하기 시작하고 find 명령을 두 개 이상의 파일 유형과 함께 사용해야합니다.bash 스크립트에서 find 명령 사용
list=$(find /home/user/Desktop -name '*.pdf')
PDF 타입에 대해,이 코드가 작동하지만 난이 .txt와 같은 하나 이상의 파일 형식을 검색하거나 together.Have 당신에게 어떤 생각을 .bmp로 싶어?
난 그냥 bash 스크립트를 사용하기 시작하고 find 명령을 두 개 이상의 파일 유형과 함께 사용해야합니다.bash 스크립트에서 find 명령 사용
list=$(find /home/user/Desktop -name '*.pdf')
PDF 타입에 대해,이 코드가 작동하지만 난이 .txt와 같은 하나 이상의 파일 형식을 검색하거나 together.Have 당신에게 어떤 생각을 .bmp로 싶어?
bash에 오신 것을 환영합니다. 그것은 늙고, 어둡고 신비한 것입니다. 위대한 마술을 할 수 있습니다. :-)
당신이 물어 보는 옵션은 bash가 아니라 find
명령입니다. 명령 줄에서 man find
을 사용하여 옵션을 볼 수 있습니다.
당신이 찾고있는 하나 "또는"에 대한 -o
입니다 :
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
... 이 작업을 수행하지 마십시오. 이와 같은 저장소는 단순한 파일 이름에서도 작동하지만 공백과 개행 같은 특수 문자를 처리하자마자 모든 베팅은 해제됩니다. 자세한 내용은 ParsingLs을 참조하십시오.
$ touch 'one.txt' 'two three.txt' 'foo.bmp'
$ list="$(find . -name \*.txt -o -name \*.bmp -type f)"
$ for file in $list; do if [ ! -f "$file" ]; then echo "MISSING: $file"; fi; done
MISSING: ./two
MISSING: three.txt
경로 이름 확장 (globbing)은 파일을 훨씬 더 안전하게 추적 할 수있는 방법을 제공합니다. 그럼 당신은 bash는 배열을 사용할 수 있습니다
$ a=(*.txt *.bmp)
$ declare -p a
declare -a a=([0]="one.txt" [1]="two three.txt" [2]="foo.bmp")
$ for file in "${a[@]}"; do ls -l "$file"; done
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 one.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 two three.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 foo.bmp
Bash FAQ bash는 프로그래밍에 대한 다른 좋은 팁 많이 있습니다.
이를 사용할 수 있습니다
list=$(find /home/user/Desktop -name '*.pdf' -o -name '*.txt' -o -name '*.bmp')
게다가, 당신은뿐만 아니라 ".PDF"(대문자) 확장자를 가진 파일을 잡으려고 -iname
대신 -name
의를 사용할 수도 있습니다.
당신이 "발견"무엇을 통해 루프 싶은 경우에, 당신은이를 사용해야합니다
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
printf '%s\n' "$file"
done
출처 : https://askubuntu.com/questions/343727/filenames-with-spaces-breaking-for-loop-find-command
당신이 따옴표를 사용해야합니다 공백이있는 파일 이름에 대처하려면' $ list'에서 for i와 같이 나중에 $ list' 변수를 사용합니다; do echo $ i; 다. 큰 따옴표를 쓰지 않으면 스크립트는 각 "파일 이름 this.jpg"를 "파일 이름", "좋아요"및 "this.jpg"의 세 파일로 간주합니다. – ash108