cp : fts_open : 그런 파일이나 디렉토리가 없습니다 / 왜?


0

나는 다음과 같은 bash 스크립트를 가지고있다.

#!/bin/bash

echo "This script will copy all JPG files inside directory '~/temp/merged':";

pwd;

read -r -p "Please confirm, that you want to copy all JPG files [y/N]" response

case $response in
    [yY][eE][sS]|[yY]) 
        find . -iname "*.jpg" -type f -print0 | while IFS= read -d '' f ;

        mkdir -p ~/temp/merged;

        do 
          echo "$f"
          cp "$f" ~/temp/merged/$orig_f
        done 
        ;;
        *)
        ;;
 esac

올바른 실행이 끝나면 다음과 같은 오류가 발생합니다.

cp : fts_open : 해당 파일 또는 디렉토리 없음

왜? 도와주세요.


NFS 공유를 통한 디렉터리 통과는 특히 rdirplus NFS 마운트 옵션이 사용됩니다.
phs

답변:


1

나는 당신의 문제가 정확히 무엇인지 말할 수는 없지만 몇 가지 문제가있다.

내가 보는 주요 문제는 다음과 같습니다.
cp "$f" ~/temp/merged/$orig_f

cp를 실행하기 전에 쉘은 변수를 찾고 있습니다. orig_f (존재하지 않습니다).

밑줄은 변수 이름에 유효한 문자입니다. variable_a="value". 따라서 접두어를 붙이거나 변수에 밑줄을 붙이려면 다음과 같이해야합니다. ${variable}_a.

다른 문제는 인용하는 것입니다. 말하다 orig_f 콘텐츠가 확장되어 문제를 일으키는 공간을 포함 할 수 있습니다. 따라서 확장 할 수있는 변수는 모두 인용해야합니다.

다음을 사용하여 스크립트를 크게 단순화 할 수 있습니다.

mkdir -p ~/temp/merged
find . -iname "*.jpg" -type f -print -exec cp {} ~/temp/merged \;

while 루프를 사용해야하는 경우 대신 다음을 수행하십시오.

mkdir -p ~/temp/merged
while IFS= read -d '' f; do 
    echo "$f"
    cp "$f" ~/temp/merged
done < <(find . -iname "*.jpg" -type f -print0)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.