1 votes

Recherche, sélection et déplacement/copie de plusieurs fichiers à la fois via le terminal

J'ai cherché les articles pertinents avant d'écrire, mais je m'excuse si la question a déjà été posée et résolue.

J'aurais besoin de trouver, sélectionner et déplacer/copier des fichiers d'un dossier à partir d'une liste dans un fichier texte (mais je pourrais aussi la coller directement si nécessaire).

J'ai trouvé quelques posts qui auraient pu aider et plus précisément ceux du lien suivant : https://stackoverflow.com/questions/29311880/finding-files-from-list-and-copying-them-into-new-directory

Cela semble parfait mais j'ai une erreur de permission ( cp: /found_files: Permission denied ) et n'a pas pu trouver de solution de contournement (j'ai essayé sudo et de nombreuses autres combinaisons).

Celui-ci semblait bien aussi : Recherche de plusieurs fichiers à la fois via le terminal . Il fonctionne très bien pour trouver les fichiers mais je n'ai pas trouvé le moyen de les sélectionner afin de pouvoir les déplacer/copier dans un nouveau répertoire.

J'ai essayé tout cela sur MacOS Sierra 10.12.6, sans configuration spéciale ni modification du terminal.

3 votes

Il est utile que vous fournissiez un exemple de liste et la commande que vous utilisez afin que nous puissions résoudre l'erreur.

0 votes

Tous les fichiers sont-ils dans le même répertoire ou certains sont-ils dans des sous-répertoires ?

0 votes

Les fichiers se trouvent tous dans le répertoire sam.

3voto

jaume Points 13186

Vous obtenez cp: /found_files: Permission denied parce que le script dans le fichier poste lié dans sa forme actuelle, est écrit pour copier les fichiers listés dans le répertoire de l'utilisateur. /found_files répertoire. Le site /found_files n'existe pas sur votre Mac et cp interprète found_files comme un fichier situé dans / . Puisque / n'est pas accessible en écriture, vous obtenez l'erreur de permission.

J'ai modifié le script pour qu'il fonctionne avec d'autres répertoires de destination et je l'ai étendu pour qu'il prenne en charge la copie et le déplacement des fichiers :

  1. Terminal de lancement. Sélectionnez un répertoire où vous enregistrez vos scripts, par exemple ~/bin :

    cd ~/bin
  2. Créez un fichier nommé cplist.sh avec ces contenus :

    #!/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. Rendre le fichier exécutable :

    chmod a+x cplist.sh
  4. Lier le fichier à mvlist.sh :

    ln -s cplist.sh mvlist.sh
  5. Pour copier un ensemble de fichiers, utilisez cplist.sh comme suit :

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

    <file list> est un fichier texte qui contient des noms de fichiers, par exemple :

    file 1.pdf
    file 2.pdf
    ...

    Pour déplacer un ensemble de fichiers, utilisez mvlist.sh comme suit :

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

Par exemple :

 ./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'

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X