Busque, seleccione y mueva / copie varios archivos a la vez a través de Terminal

1

Busqué extensamente las publicaciones relevantes antes de escribir, pero me disculpo si ya se ha preguntado y resuelto.

Necesitaría encontrar, seleccionar y mover / copiar algunos archivos de una carpeta a partir de una lista en un archivo de texto (pero también podría pegarlo directamente si es necesario).

He encontrado algunas publicaciones que podrían haber ayudado y más precisamente las que se encuentran en el siguiente enlace: enlace

Esto parece perfecto pero tengo un error de permiso ( cp: /found_files: Permission denied ) y no pude encontrar una solución (probé sudo y muchas otras combinaciones).

Este también parecía estar bien: Encuentre múltiples archivos a la vez a través de Terminal . Funciona muy bien para encontrar los archivos, pero no pude encontrar una manera de seleccionarlos para poder moverlos / copiarlos a un nuevo directorio.

Intenté todo esto en macOS Sierra 10.12.6 sin configuraciones especiales ni cambios en la Terminal.

    
pregunta Michael 19.08.2018 - 14:22

1 respuesta

3

Obtienes cp: /found_files: Permission denied porque el script en la publicación vinculada , en su forma actual, está escrito para copiar el archivos enumerados al directorio /found_files . El directorio /found_files no existe en su Mac y cp interpreta found_files como un archivo ubicado en / . Como / no se puede escribir, obtienes el error de permiso.

He modificado el script para que funcione con otros directorios de destino y lo amplié para admitir la copia y movimiento de archivos:

  1. Ejecutar Terminal. Seleccione un directorio donde guardar sus scripts, por ejemplo, ~/bin :

    cd ~/bin
    
  2. Cree un archivo llamado cplist.sh con estos contenidos:

    #!/bin/bash
    
    source_dir="$1"
    destination_dir="$2"
    file_list="$3"
    
    # Sanity checks
    if [[ $# -ne 3 ]]; then
        echo "Usage: $0 <source dir> <target dir> <file list>"
        exit 0
    fi
    if [[ ! -d "$source_dir" ]]; then
        echo "$0: '$source_dir' could not be found"
        exit 1
    fi
    if [[ ! -d "$destination_dir" ]]; then
        echo "$0: '$destination_dir' could not be found"
        exit 1
    fi
    if [[ ! -f "$file_list" ]]; then
        echo "$0: '$file_list' could not be found"
        exit 1
    fi
    
    # Copy or move?
    if [[ $(basename $0) == "mvlist.sh" ]]; then
        command="mv"
        action="Moving"
    else
        command="cp -a"
        action="Copying"
    fi
    
    # Copy files    
    while read filename
    do
        echo "$action file '$filename'"
        if [[ -f "$source_dir/$filename" ]]; then
            find "$source_dir" -name "$filename" -exec $command "{}" "$destination_dir" \;
        else
            echo "File '$filename' is listed in '$file_list' but could not be found"
        fi  
    done < "$file_list"
    
  3. Haz el archivo ejecutable:

    chmod a+x cplist.sh
    
  4. Vincule el archivo a mvlist.sh :

    ln -s cplist.sh mvlist.sh
    
  5. Para copiar un conjunto de archivos, use cplist.sh de la siguiente manera:

    ./cplist.sh <source dir> <destination dir> <file list>
    

    donde <file list> es un archivo de texto que contiene nombres de archivos, por ejemplo:

    file 1.pdf
    file 2.pdf
    ...
    

    Para mover un conjunto de archivos, use mvlist.sh de la siguiente manera:

    ./mvlist.sh <source dir> <destination dir> <file list> 
    

Por ejemplo:

 ./mvlist.sh 
 Usage: ./mvlist.sh <source dir> <target dir> <file list>

 ./mvlist.sh /tmp/ /nonexistentfolder filelist.txt
 ./mvlist.sh: '/nonexistentfolder' could not be found

 ./mvlist.sh /tmp/source/ /tmp/destination filelist.txt
 Moving file 'file 1.pdf'
 Moving file 'file 2.pdf'
 Moving file 'file 3.pdf'
 Moving file 'file 4.pdf'
 Moving file 'file 5.pdf'
 Moving file 'file a.pdf'
 File 'file a.pdf' is listed in 'filelist.txt' but could not be found
 Moving file 'file 6.pdf'
 Moving file 'file 7.pdf'
 Moving file 'file 8.pdf'
 Moving file 'file 9.pdf'
    
respondido por el jaume 19.08.2018 - 17:51

Lea otras preguntas en las etiquetas