cp 不能在脚本中工作,但可以在命令行中工作

cp 不能在脚本中工作,但可以在命令行中工作

我有一个脚本用于自动化一个简单的过程,我将一个数字扫描到命令行中,从目录文件中 grep 出该数字,该文件为我提供了一个路径,然后将上述数字对应的 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 系统上,通配符由 shell 处理。*以下命令中的转义符将传递给看起来名为但可能不存在的cp文件。/media/*

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

相比之下,在 Windows 中,*不是由命令处理器而是由copy命令处理。

仅允许 root 更改文件所有权。否则,系统的任何用户都可以获取任何其他用户的文件。cp: failed to preserve ownership ...预计如此。

相关内容