Bash 스크립트의 파일 경로 변수

Bash 스크립트의 파일 경로 변수

약 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 옵션을 사용할 수 있습니다 .findfind-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 {} \;

관련 정보