cp는 스크립트에서는 작동하지 않지만 명령줄에서는 작동합니다.

cp는 스크립트에서는 작동하지 않지만 명령줄에서는 작동합니다.

명령줄에 숫자를 스캔하고 경로를 제공하는 디렉터리 파일에서 해당 숫자를 검색한 다음 위 숫자에 해당하는 DVD를 해당 경로에 복사하는 간단한 프로세스를 자동화하는 스크립트가 있습니다. cp 명령이 계속 실패합니다. 스크립트에서 cp가 작동하지 않는 다른 게시물을 본 적이 있는데, 모두 파일 이름 주위에 따옴표가 붙어 있는 것 같습니다. 나는 이것이 내 문제라고 생각하지 않습니다.

결과가 더 명확해지기를 바라면서 몇 가지 의견을 추가했습니다.

\#!/bin/bash
\# accepts a single command line parameter:  six-digit DVD number, ex. 987110
\# the empty echo lines are just whitespace for readability**

clear

file=/public/TAPES/batch1/Shipment_1_catalog.txt.dvd

echo
echo DVD number is       $1

echo
echo catalogfile is      $file

>\# this grep instruction greps $1 out of $file
>\# output from this is 'XXXXXX file-path-to-copy-dvd-contents-to'
>\# qwk puts the file-path... into $pth

pth=`grep $1 $file | awk ' { print $2 } '`

echo

echo destination path is $pth

echo

mount /dev/sr0 /media     # appears to work

cp -p -r /media/\* $pth   # this always fails - see error text below.

echo

umount /dev/sr0 && eject  # this does work

복사 명령을 제외하고는 모든 것이 잘 작동합니다. 다음과 같은 오류 출력이 생성됩니다.

DVD 번호는 987110입니다.

catalogfile is /public/TAPES/batch1/Shipment_1_catalog.txt.dvd

destination path is > /proj/T_010/gdm/SAM/BRA/3D/Santos_ESP_3D_BDEP_2010/dvd/legacy/987110_Line_Section_Various_Vintages-Post_Stack_Migration_DVD_14_of_41

mount: block device /dev/sr0 is write-protected, mounting read-only
cp: cannot stat `/media/*': No such file or directory

이 스크립트의 권한은 755입니다. 나는 "./cpy.sh"와 "bash cpy.sh"를 시도했고 두 번 모두 같은 결과를 얻었습니다.

답변1

UNIX 시스템에서는 와일드카드 문자가 셸에서 처리됩니다. *다음 명령의 이스케이프 문자는 cp이름이 지정된 것처럼 보이지만 존재하지 않을 수 있는 파일을 전달합니다./media/*

cp -p -r /media/\* $pth

대조적으로, Windows에서는 명령 프로세서가 아니라 명령 *에 의해 처리됩니다 .copy

루트만 파일 소유권을 변경할 수 있습니다. 그렇지 않으면 시스템의 모든 사용자가 다른 사용자의 파일을 얻을 수 있습니다. cp: failed to preserve ownership ...예상대로 그렇습니다.

관련 정보