MV-Dateien mit | xargs

18

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

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

aber ich bin ein Ubuntu n00b und erhalte diesen Fehler:

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

Wobei 'real-file' eine Testdatei ist, die ich in meiner Entwicklungsumgebung erstellt habe. Ich versuche, die Unordnung eines anderen auf einem Produktionsserver aufzuräumen ;-)

rauben
quelle

Antworten:

27

Sie könnten die -execOption mit findBefehl versuchen ,

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

Zum Verschieben von Dateien, deren Eigentümer root ist, benötigen Sie sudoBerechtigungen.

Wenn Sie den xargsBefehl verwenden möchten, fügen Sie ihm eine -IOption hinzu.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/
Avinash Raj
quelle
7

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

ZB sollte dies funktionieren:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory
David Goodwin
quelle
0

Sie können auch eine andere Methode verwenden, um dasselbe auszuführen, jedoch mit einer zusätzlichen Leistung :

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

Beachten Sie, dass es endet, mit \+welchen Mitteln der Befehl find die Ausgabe abruft und erweitert, um das zu {}tun, was Sie wollen. Auf diese Weise vermeiden Sie die beiden Optionen ( \;= für jeden Eintrag UND das Weiterleiten in einen neuen Befehl xargs).

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

Befehl -exec {} + Diese Variante der Aktion -exec führt den angegebenen Befehl für die ausgewählten Dateien aus, die Befehlszeile wird jedoch erstellt, indem jeder ausgewählte Dateiname am Ende angehängt wird. Die Gesamtzahl der Aufrufe des Befehls ist viel geringer als die Anzahl der übereinstimmenden Dateien. Die Befehlszeile ist in etwa so aufgebaut wie die Befehlszeilen von xargs. Innerhalb des Befehls ist nur eine Instanz von '{}' zulässig. Der Befehl wird im Startverzeichnis ausgeführt.

gonzalesraul
quelle