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 sudo
und 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.
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_files
Verzeichnis zu kopieren. Das /found_files
Verzeichnis ist auf Ihrem Mac nicht vorhanden und wird als Datei cp
interpretiert , 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:
Terminal starten. Wählen Sie ein Verzeichnis aus, in dem Sie Ihre Skripte speichern, zum Beispiel ~/bin
:
cd ~/bin
Erstellen Sie eine Datei cplist.sh
mit 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"
Machen Sie die Datei ausführbar:
chmod a+x cplist.sh
Verlinken Sie die Datei mit mvlist.sh
:
ln -s cplist.sh mvlist.sh
Verwenden Sie zum Kopieren eines Satzes von Dateien cplist.sh
Folgendes:
./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.sh
Folgendes:
./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'
Allan
fd0
Michael