2011-11-25 18 views
5

Estoy intentando hacer un script que copie archivos de un directorio y coloque los archivos copiados en un nuevo directorio.Cómo combinar comandos de shell

Sé que el comando cp copiará los archivos y el comando mkdir creará el directorio, pero ¿alguien sabe cómo combinar estos 2 comandos en una sola línea?

Hasta ahora he

mkdir /root/newdir/ cp /root/*.doc /root/newdir 

esto da el mensaje de error

mkdir: cannot create directory 'cp': Files exists 
mkdir: cannot create directory '/root/files/wp.doc: File exists 
mkdir: cannot create directory 'mkdir' : File exists 
mkdir: cannot create directory '/root/files/new dir: file exists 

Sin embargo sí se crea el directorio newdir

Respuesta

8
mkdir -p /root/newdir/ && cp /root/*.doc /root/newdir/ 

Para ello, será mkdir para crear la estructura de directorios, comprobar si la ejecución del comando fue exitosa y llamar a cp comando si lo fue.

+0

Esta mucho aunque viene con el mensaje de error gracias funciona ... cp: directorio omitiendo 'mkdir' – user1065861

+0

@ user1065861 : 'cp' no copia directorios de forma predeterminada. Tienes que especificar la opción '-p' si quieres que lo haga. Verifique el contenido de su directorio '/ root' - es probable que haya creado directorios involuntarios allí mientras jugaba con esos comandos. –

+0

Err ... opción '-r', perdón. –

2
mkdir /root/newdir/; cp /root/*.doc /root/newdir 
0

Lugar punto y coma entre dos comandos

0

Esto sucede porque no le dice a la concha donde terminan exactamente los comandos. En este caso:

mkdir /root/newdir/ cp /root/*.doc /root/newdir 

Su comando cp irá como un argumento para el comando mkdir y shell intenta hacer que el archivo llamado cp. Lo mismo le ocurre a todos los demás.

Poniendo el ; después de los comandos. Le dice al shell que el comando se ha terminado y la siguiente palabra es otro comando.

nueva línea (tecla de retorno) también se trata como el comando seprator. Entonces, si pone cada comando en la línea siguiente, también funciona bien. para que pueda probar cualquiera de estos:

mkdir /root/newdir/ ; cp /root/*.doc /root/newdir 

O

mkdir /root/newdir/ 

cp /root/*.doc /root/newdir 
+0

Buena explicación, pero para la solución prefiero ['&&'] (http://stackoverflow.com/a/8271018/667820) a ';' ya que el primero se ocupa de la posibilidad de una falla 'mkdir'. –

Cuestiones relacionadas