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

관련 정보