Ich möchte die ersten 'n' Dateien von einem Verzeichnis in ein anderes Verzeichnis kopieren, vorzugsweise nur mit CLI-Tools (keine Skripte).
Ich habe folgendes versucht:
find . -maxdepth 1 -type f | head -5 | xargs cp -t /target/directory
Dies sah vielversprechend aus, schlug jedoch fehl, da der Befehl osx den Schalter
cp
nicht zu haben scheint
-t
exec
in ein paar verschiedenen Konfigurationen
Dies ist wahrscheinlich wegen Syntaxproblemen auf meiner Seite fehlgeschlagen: /
Ich konnte anscheinend keinehead
Typauswahl zum Laufen bringen
Jede mögliche Hilfe oder Vorschläge würden geschätzt.
Vielen Dank im Voraus!
Sie benötigen die -J
Option mit xargs
.
find . -maxdepth 1 -type f | head -n5 | xargs -J X cp X /target/directory
Die J
Option fügt alle Dateinamen in den Platzhalter X ein, der beliebige Zeichen sein kann, und cp
akzeptiert mehrere Dateien in einem Zielverzeichnis. Es kann visualisiert werden als-
cp file1 file2 file3 file4 file5 DESTINATION
BEARBEITEN:
Um Dateinamen mit Leerzeichen zu handhaben, haben wir tr
das Zeilenumbruchzeichen nach jedem Dateinamen in das Nullzeichen übersetzt und dann xargs das Nullbit als Trennzeichen für die Dateinamen behandeln lassen.
find . -maxdepth 1 -type f | head -n5 | tr '\n' '\0' | xargs -0 -J X cp -- X /target/directory
Ich habe eine andere Lösung ohne xargs
oder gefunden -exec
, aber ich denke, die Antwort von fd0 ist ein besserer Weg:
while IFS= read -r f; do cp "$f" "/target/directory/"; done < <(find . -maxdepth 1 -type f | head -n5)
IFS
auf nichts setzen IFS=
, um führende oder nachgestellte Leerzeichen in einem Dateinamen zu behandeln und die Prozessersetzung anstelle der Befehlsersetzung und einer Here-Zeichenfolge zu verwenden. Ihre Lösung wird definitiv langsamer sein, aber sie wird Dateinamen mit Leerzeichen verarbeiten. Meine Lösung wird nicht in ihrer jetzigen Form.IFS=
wäre aber nicht sicher, wie man die Befehlsersetzung und hier die Zeichenfolge für die ProzessersetzungIFS=; while read ...
austauscht , ohne etwas zu recherchieren. Es würde mir nichts ausmachen, wenn Sie mir meine Antwort zeigen oder sogar bearbeiten, danke.
<
in ... done < <( ...
meinen Tests verpasst. :)
sichtbar
head -n5
? Auf jeden Fall vielen Dank und danke auch @user3439894 für deinen Beitrag!fd0
sichtbar
-5
und nicht-n5
. Ich war mir nicht sicher, ob das eine akzeptable Kurzschrift oder ein Syntaxfehler war. Ich glaube, ich bin mir immer noch nicht sicher.Benutzer3439894
Benutzer3439894
fd0
-n5
würde die ersten fünf Zeilen bedeuten und-5
alle bis auf die letzten fünf Zeilen. Bei BSD Head sind beide gleich.sichtbar
Benutzer3439894
Benutzer3439894