![find와 동일한 쉘 스크립트에서 while이 작동하지 않는 이유는 무엇입니까? [폐쇄]](https://linux55.com/image/146669/find%EC%99%80%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20while%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
10KB보다 큰 모든 파일을 찾아 다른 디렉터리로 이동해야 하는 다음 코드가 있습니다.
read mam
find "$mam" -type f -size +10k > size.txt
while read line
do
mv "$line" /home/patakinorbert/Desktop/prk1
done < size.txt
답변1
쉘 스크립트가 필요하지 않습니다. 단일 find
명령으로 파일을 검색하고 이동합니다.
read -r mam
find "$mam" -type f -size +10k -exec mv {} /home/patakinorbert/Desktop/prk1 \;
-exec
과 사이의 단어는 \;
발견된 각 파일에 대해 실행되는 명령이며 {}
발견된 파일의 이름으로 대체됩니다.
Ubuntu와 같은 Linux 시스템이나 GNU 도구를 사용하는 모든 시스템에서 이 명령의 보다 효율적인 버전은 다음과 같습니다.
read -r mam
find "$mam" -type f -size +10k -exec mv -t /home/patakinorbert/Desktop/prk1 +
이는 한 번의 호출을 사용하여 여러 파일을 이동하기 때문에 더 효율적입니다 mv
.