Ejecutando CP excluyendo archivos de Bash Script -- mmand-line campo con bash campo con 20.04 campo con scripts camp askubuntu Relacionados El problema

Executing cp Excluding Files from Bash Script


0
vote

problema

Español

Actualmente estoy escribiendo un script de bash para automatizar una tarea para mi investigación, es decir, crear procesos de múltiples scripts que se enviarán a un clúster.

My Bash Script está compuesto por una operación de copia que copiará todos los archivos a alguna carpeta con un nombre generado con un procedimiento, excepto este archivo. Sé cómo hacerlo manualmente, pero dentro del script de bash no parece funcionar:

  #!bin/sh  i=0 var=""  while [ $i -lt 6 ] do    i=$(( $i+1 ))        var="NameOfFolder${i}"    mkdir "${var}"    cp !(fileName) "${var}" done   

El problema que estoy teniendo es que los paréntesis en el comando cp se están interpretando de manera diferente.

El error que recibo es:

  Syntax error: "(" unexpected (expecting "done")   

Cuando quito la línea en la que se da el comando abcdefghijklmncp , el script se ejecuta, por lo que el problema está en esa línea. Ya lo he intentado:

  #!bin/sh  i=0 var=""  while [ $i -lt 6 ] do    i=$(( $i+1 ))        var="NameOfFolder${i}"    mkdir "${var}"    cp !((fileName)) "${var}" done   

y

  ABCDEFGHIJKLMNABCDEFGHIJKLMN5   

sin ningún éxito.

Pregunta ¿Cuál es la forma correcta de introducir los comandos entre paréntesis sin que el script de Bash los interprete como operadores "Programación"?

Original en ingles

I am currently writing a bash script to automate a task for my research, i.e., procedurally creating multiple scripts that will be sent to a cluster.

My bash script is composed of a copy operation that will copy all the files to some folder with a name generated with a procedure, except this one file. I know how to do this manually, but within the bash script it does not seem to work:

#!bin/sh  i=0 var=""  while [ $i -lt 6 ] do    i=$(( $i+1 ))        var="NameOfFolder${i}"    mkdir "${var}"    cp !(fileName) "${var}" done 

The problem I am having is that the parentheses in cp command are being interpreted differently.

The error I get is:

Syntax error: "(" unexpected (expecting "done") 

When I remove the line in which the cp command is given the script runs, so the problem is in that line. I have already tried:

#!bin/sh  i=0 var=""  while [ $i -lt 6 ] do    i=$(( $i+1 ))        var="NameOfFolder${i}"    mkdir "${var}"    cp !((fileName)) "${var}" done 

and

#!bin/sh  i=0 var=""  while [ $i -lt 6 ] do    i=$(( $i+1 ))        var="NameOfFolder${i}"    mkdir "${var}"    cp ( !(fileName) ) "${var}" done 

Without any success.

Question

What is the proper way to introduce the commands in parentheses without the bash script interpreting them as "programming" operators?
           
     
     

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Puede usar la expansión para crear un rango de carpetas (también deberá excluir las carpetas)

  sane3  
 

You can use brace expansion to create a range of folders (you will also need to exclude the folders themself)

#!/bin/bash  shopt -s extglob  for i in folder_{1..6}; do     mkdir -p "$i" && \     cp -t "$i" -- !(filename|${i%_*}_*) done 
 
 
       
       
0
 
vote

Puede usar un sane4 como una alternativa a la construcción con sane5 : Reemplace, por ejemplo,

  sane6  

con

  ABCDEFGHIJKLMNABCDEFGHIJKLMN17   

El ABCDEFGHIJKLMNABCDEFGHIJKLMN18 OPCIÓN DE ABCDEFGHIJKLMNABCDEFGHIJKLMN19 hace que las cosas sean fáciles de administrar.

 

You can use a rsync as an alternative to the construct with cp: replace for example

cp ( !(fileName) ) "${var}" 

with

rsync --exclude="$fileName" * "./${var}" 

The --exclude option of rsync makes things easy to manage.

 
 
 
 
0
 
vote

Hola, bienvenido a Askubuntu!

Intenta esto:

Dónde:

  1. find - una herramienta para (de hombre) "Buscar archivos en una jerarquía de directorios"
  2. ABCDEFGHIJKLMNABCDEFGHIJKLMN1 Es la carpeta / directorio que desea incluir (todos los subdirectorios y amplificadores; Los sub-archivos debajo de este se buscarán)
  3. -name *.ext - Esta es la extensión (el final de finalización del archivo)
  4. -type f es un archivo de tipo.
  5. -exec strings {} path/to/this/copiedfiles ; - Este está ejecutando el comando cp en file 1 , abcdefhijklmnabcdefghijklmn7 ..., todo arriba a ABCDEFGHIJKLMNABCDEFGHIJKLMN8 TO PATH / TO / ESTO / COPIEDFILES

Entonces, por ejemplo:

Copie todos los archivos que terminan con ".odt" en la carpeta / home / bob / docs / (incluidos todos los sub-archivos en subdituarios en docs / ) al directorio / casa / BOB / BACKUPS / ODT /:

ABCDEFGHIJKLMNABCDEFGHIJKLMN9

 

Hello, welcome to Askubuntu!

Try this:

Where:

  1. find - a tool to (from man) "search for files in a directory hierarchy"
  2. . is the folder/directory you want to include (all sub-directories & sub-files under this one will be searched)
  3. -name *.ext - this is the extension (the ending .name of the file)
  4. -type f is a type file.
  5. -exec strings {} path/to/this/copiedfiles \; - this one is executing the command cp on file 1,file 1..., all up to last file found to path/to/this/copiedfiles

So, for example:

Copy all files ending with ".odt" in the folder /home/bob/docs/ (including all the sub-files in sub-directories under docs/) to the directory /home/bob/backups/odt/:

find /home/bob/docs/ -name "*.odt" -type f -exec cp {} /home/bob/backups/odt/{}.backup \;

 
 
 
 

Relacionados problema

22  Script de bash que no se ejecuta desde crontab [duplicado]  ( Bash script not executing from crontab ) 
Esta pregunta ya tiene respuestas aquí : ¿Por qué los scripts de Crontab no funcionan? ...

11  Ejecute scripts automáticamente en el servidor después de la conexión SSH  ( Run scripts automatically in server after ssh connection ) 
Cómo ejecutar un script automáticamente en el servidor Poco después de que el sistema del cliente establezca la conexión SSH con el servidor para ex: Supong...

135  ¿Cómo ejecutar un script simplemente haciendo doble clic en los archivos similares en Windows?  ( How to execute a script just by double clicking like exe files in windows ) 
¿Cómo puedo hacer que un script de Bash sea ejecutable haciendo doble clic al igual que ABCDEFGHIJKLMNABCDEFGHIJKLMN5 archivos en Windows? Lo intenté crean...

9  ¿Cómo apagar Ubuntu después de (2 horas) de inactivo?  ( How to shutdown ubuntu after 2 hours of idle ) 
Correr: Xubuntu 14.04 32bit. He leído varias desactualizadas, no funcionando, trabajando diferente que quiero respuestas aquí y en otros lugares. Tuve un gu...

2  Abra la carpeta principal de un enlace simbólico a través de clic con el botón derecho?  ( Open the parent folder of a symbolic link via right click ) 
Podemos abrir una carpeta principal de cualquier archivo usando Script Nautilus como #!/bin/bash nautilus "$1" Si hago este script en el enlace simbó...

0  Script Shell para instalar software y configurar la red  ( Shell script to install software configure network ) 
Oye, quería saber cómo, después de una nueva instalación de Ubuntu, puedo instalar todos los softwares esenciales (VLC, Apache, MySQL, PHP, Java, NetbeanSetc)...

2  ¿Cómo monitorear un archivo local para cambios, aplique un REGEX reemplazarlo y guardar / sobrescribir a un archivo de destino?  ( How to monitor a local file for changes apply a regex replace on it and save ov ) 
Me gustaría comenzar un script o algo que vea un archivo de texto para cambios. Cuando cambie el archivo, quiero ejecutarlo a través de un analizador REGEX pa...

3  dpkg sin shell  ( Dpkg with no shell ) 
¿Cómo ejecutar DPKG sin shell? Aquí está mi problema: HECHO Y AUTORUN.SH Script en mi clave USB. Para ejecutar este script, creé reglas en /etc/udev/ru...

0  Diferentes etapas en la programación de bash  ( Different stages in bash programming ) 
Tengo un programa de bash con diferentes etapas como: $stage=1 if [ stage -le 1]; then echo "execute stage 1" fi if [ stage -le 2]; then echo "execute sta...

6  Mi función de bash se ejecuta solo una vez por terminal abierto  ( My bash function runs only once per terminal opened ) 
Cuando intento ejecutar mi función de bash, definida en .bashrc, por segunda vez en el mismo terminal, no funciona. El código es el siguiente: lspci6 ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos