Suchen, wählen und verschieben/kopieren Sie mehrere Dateien gleichzeitig über das Terminal

Ich habe vor dem Schreiben ausgiebig nach relevanten Beiträgen gesucht, aber ich entschuldige mich, wenn es bereits gefragt und gelöst wurde.

Ich müsste einige Dateien aus einem Ordner suchen, auswählen und verschieben / kopieren, beginnend mit einer Liste in einer Textdatei (könnte sie aber bei Bedarf auch direkt einfügen).

Ich habe einige Beiträge gefunden, die geholfen haben könnten, und genauer gesagt die unter dem folgenden Link: https://stackoverflow.com/questions/29311880/finding-files-from-list-and-copying-them-into-new -Verzeichnis

Das scheint perfekt zu sein, aber ich habe einen Berechtigungsfehler ( cp: /found_files: Permission denied) und konnte keine Lösung finden (versuchte sudound viele andere Kombinationen).

Dieser schien auch in Ordnung zu sein: Finden Sie mehrere Dateien gleichzeitig über Terminal . Es funktioniert sehr gut, die Dateien zu finden, aber ich konnte keine Möglichkeit finden, sie auszuwählen, um sie in ein neues Verzeichnis verschieben/kopieren zu können.

All dies unter macOS Sierra 10.12.6 ohne spezielle Konfigurationen oder Änderungen im Terminal versucht.

Es ist hilfreich, wenn Sie eine Beispielliste und den von Ihnen verwendeten Befehl bereitstellen, damit wir den Fehler beheben können.
Sind alle Dateien im selben Verzeichnis oder sind einige in Unterverzeichnissen?
Die Dateien befinden sich alle im selben Verzeichnis.

Antworten (1)

Sie erhalten cp: /found_files: Permission denied, weil das Skript im verlinkten Beitrag in seiner aktuellen Form geschrieben wurde, um die aufgelisteten Dateien in das /found_filesVerzeichnis zu kopieren. Das /found_filesVerzeichnis ist auf Ihrem Mac nicht vorhanden und wird als Datei cpinterpretiert , die sich in . Da nicht beschreibbar ist, erhalten Sie den Berechtigungsfehler.found_files//

Ich habe das Skript so geändert, dass es mit anderen Zielverzeichnissen funktioniert, und es erweitert, um das Kopieren und Verschieben von Dateien zu unterstützen:

  1. Terminal starten. Wählen Sie ein Verzeichnis aus, in dem Sie Ihre Skripte speichern, zum Beispiel ~/bin:

    cd ~/bin
    
  2. Erstellen Sie eine Datei cplist.shmit folgendem Inhalt:

    #!/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. Machen Sie die Datei ausführbar:

    chmod a+x cplist.sh
    
  4. Verlinken Sie die Datei mit mvlist.sh:

    ln -s cplist.sh mvlist.sh
    
  5. Verwenden Sie zum Kopieren eines Satzes von Dateien cplist.shFolgendes:

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

    wo <file list>ist eine Textdatei, die Dateinamen enthält, zum Beispiel:

    file 1.pdf
    file 2.pdf
    ...
    

    Um eine Reihe von Dateien zu verschieben, verwenden Sie mvlist.shFolgendes:

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

Zum Beispiel:

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