Busqué extensamente publicaciones relevantes antes de escribir, pero me disculpo si ya se ha preguntado y resuelto.
Necesitaría buscar, 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 fuera necesario).
Encontré algunas publicaciones que podrían haber ayudado y, más precisamente, las del siguiente enlace: https://stackoverflow.com/questions/29311880/finding-files-from-list-and-copying-them-into-new -directorio
Esto parece perfecto, pero tengo un error de permiso ( cp: /found_files: Permission denied
) y no pude encontrar una solución alternativa (intenté sudo
y muchas otras combinaciones).
Este también parecía estar bien: encuentre varios 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.
Obtiene cp: /found_files: Permission denied
porque el script en la publicación vinculada , en su forma actual, está escrito para copiar los archivos enumerados en el /found_files
directorio. El /found_files
directorio no existe en su Mac y cp
se interpreta found_files
como un archivo ubicado en /
. Como /
no se puede escribir, obtiene el error de permiso.
Modifiqué el script para que funcione con otros directorios de destino y lo expandí para admitir la copia y el movimiento de archivos:
Terminal de lanzamiento. Seleccione un directorio donde guarde sus scripts, por ejemplo ~/bin
:
cd ~/bin
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"
Hacer el archivo ejecutable:
chmod a+x cplist.sh
Vincular el archivo a mvlist.sh
:
ln -s cplist.sh mvlist.sh
Para copiar un conjunto de archivos, use cplist.sh
lo siguiente:
./cplist.sh <source dir> <destination dir> <file list>
donde <file list>
es un archivo de texto que contiene nombres de archivo, por ejemplo:
file 1.pdf
file 2.pdf
...
Para mover un conjunto de archivos, use mvlist.sh
lo siguiente:
./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'
Alano
fd0
Miguel