명령줄에 숫자를 스캔하고 경로를 제공하는 디렉터리 파일에서 해당 숫자를 검색한 다음 위 숫자에 해당하는 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 ...
예상대로 그렇습니다.