mv Dateien mit | xargs

9

Ich versuche nur, eine Reihe von Dateien (keine Symlinks) aus meinem / etc / apache / sites-enabled-Ordner in den Ordner / etc / apache / sites-available mit folgenden Elementen zu verschieben:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

aber ich bin ein ubuntu n00b und bekomme diesen Fehler:

mv: target './real-file' is not a directory

wo 'reale Datei' eine Testdatei ist, die ich in meiner Entwicklungsumgebung eingerichtet habe. Ich versuche, die Unordnung eines anderen auf einem Produktionsserver aufzuräumen ;-)

    
Rob 23.06.2014, 10:17

3 Antworten

17

Sie könnten die Option -exec mit dem Befehl find versuchen,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Zum Verschieben von Dateien im Besitz von root benötigen Sie sudo Berechtigungen.

Wenn Sie den Befehl xargs verwenden möchten, fügen Sie die Option -I hinzu.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/
    
Avinash Raj 23.06.2014, 10:22
2

Idealerweise sollten Sie -print0 mit find verwenden, damit Dateinamen mit Leerzeichen nichts vermasseln.

z. das sollte funktionieren:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory
    
David Goodwin 23.06.2014 18:05
0

Sie können auch einen anderen Weg wählen, um dasselbe auszuführen, aber mit einer zusätzlichen Leistung :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Beachten Sie, dass es mit \+ endet, was bedeutet, dass der Befehl find die Ausgabe erhält und in {} expandiert, was Sie wollen. Auf diese Weise vermeiden Sie die beiden Optionen ( \; = für jeden Eintrag UND-Piping in einen neuen Befehl xargs )

Hier ist die Erklärung (Sie können auch das Handbuch man find überprüfen)

  

-exec-Befehl {} +                 Diese Variante der Aktion -exec führt den angegebenen Befehl für die ausgewählten Dateien, aber den Befehl aus                 Zeile wird erstellt, indem jeder ausgewählte Dateiname an das Ende angehängt wird; die Gesamtzahl der Aufrufe von                 Der Befehl ist viel kleiner als die Anzahl der übereinstimmenden Dateien. Die Befehlszeile ist viel eingebaut                 genauso wie xargs seine Befehlszeilen erstellt. Nur eine Instanz von '{}' ist innerhalb der                 Befehl. Der Befehl wird im Startverzeichnis ausgeführt.

    
Raul Gonzales 05.04.2018 11:57

Tags und Links