cp não funciona em um script, mas na linha de comando

0

Eu tenho este script para automatizar um processo simples onde eu digitalizo um número na linha de comando, libero esse número de um arquivo de catálogo que me fornece um caminho e depois copio o DVD ao qual o número acima mencionado corresponde. o caminho. O comando cp continua falhando. Eu olhei para outros posts onde o CP não está funcionando em um script, mas todos eles parecem ter a ver com citações em torno de nomes de arquivos. Eu não acho que é o meu problema aqui.

Adicionei alguns comentários, pois espero que se tornem claros:

\#!/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

Tudo funciona, exceto o comando de cópia. Ela produz a seguinte saída de erro:

DVD number is 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

As permissões para o script são 755. Eu tentei como './cpy.sh' e 'bash cpy.sh' com os mesmos resultados nas duas vezes.

    
por dwesson 11.02.2016 / 19:16

1 resposta

1

Em curingas, os sistemas UNIX são manipulados pelo shell. O escape * no comando a seguir é passado para cp , que parece um arquivo chamado /media/* e presumivelmente não existe.

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

No Windows, pelo contrário, o * não é tratado pelo processador de comandos, mas pelo comando copy .

Somente a raiz tem permissão para alterar a propriedade do arquivo. Caso contrário, qualquer usuário do sistema poderá levar outros arquivos de usuários. Então cp: failed to preserve ownership ... é esperado.

    
por 11.02.2016 / 22:50