![Bash 스크립트의 파일 경로 변수](https://linux55.com/image/154409/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EA%B2%BD%EB%A1%9C%20%EB%B3%80%EC%88%98.png)
약 20,000개의 문자열이 포함된 파일이 있습니다. 이 파일의 각 문자열은 bash 스크립트의 명령에 대한 인수여야 합니다.
먼저 내 스크립트는 문자열이 포함된 파일을 생성합니다.
find /home/alotoffolders -type f -name "*.mp4" | grep some_greps > ~/tests/find_smth
변수를 설정하려고 하면 매개변수의 일부가 됩니다.
filename=$(cut -d/ -f11 ~/tests/find_smth)
그런 다음 모든 파일을 한 줄씩 읽고 각 문자열을 입력 매개 변수로 사용하려고 시도했지만(작동하는 것 같습니다) 출력에는 몇 가지 문제가 있습니다.
for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done
스크립트는 $filename 이전의 정적 경로를 볼 수 없습니다.
뭐가 문제 야?
답변1
- 사용하지 마세요
for i in $(cat ...) ...
또는 유사합니다. 줄이 아닌 단어를 반복합니다. 가능하더라도 파일 이름에는 개행 문자가 포함될 수 있습니다. - 사용쉘 매개변수 확장또는 파일 이름을 얻는
basename
대신 명령을 내리세요cut
. grep
결과를 사용하는 대신 예를 들어 or 옵션을 사용할 수 있습니다 .find
find
-regex
-iregex
find -exec
다음과 함께 사용 sh -c
:
find /home/alotoffolders -type f -iregex 'some_pattern.mp4' \
-exec sh -c '
/path/to/other_script -input "$1" -output "/home/folder1/folder2/${1##*/}"
' find-sh {} \;