
약 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
의 결과에 사용하는 대신 의 또는 옵션을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 {} \;