J'essaie simplement de déplacer un groupe de fichiers (et non de liens symboliques) de mon dossier/etc/Apache/sites-enabled dans le dossier/etc/Apache/sites-available avec les éléments suivants:
/etc/Apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/
mais je suis un ubuntu n00b et j'obtiens cette erreur:
mv: target `./real-file' is not a directory
où 'real-file' est un fichier de test que j'ai configuré sur mon environnement de développement. J'essaie de nettoyer le désordre de quelqu'un d'autre sur un serveur de production ;-)
Vous pouvez essayer l’option -exec
avec la commande find
,
/etc/Apache2/sites-enabled$ Sudo find . -maxdepth 1 -type f -exec mv {} /etc/Apache2/sites-available \;
Pour déplacer des fichiers appartenant à root, vous devez disposer d'autorisations Sudo
.
Si vous souhaitez utiliser la commande xargs
, ajoutez-y l'option -I
.
find . -maxdepth 1 -type f | Sudo xargs -I {} mv {} /etc/Apache2/sites-available/
Idéalement, vous devez utiliser -print0 avec find, afin que les noms de fichiers avec des espaces ne gachent pas les choses.
Par exemple. cela devrait fonctionner:
find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory
vous pouvez également utiliser une autre méthode pour effectuer la même chose mais avec un performance supplémentaire:
find . -maxdepth 1 -type f -exec mv {} /etc/Apache2/sites-available \+
Notez qu'il se termine par \+
, ce qui signifie que la commande find récupère la sortie et la développe dans {}
en faisant ce que vous voulez. Ainsi, vous évitez les deux options (\;
= pour chaque entrée ET en créant une nouvelle commande xargs
name__).
Voici l'explication (vous pouvez également consulter le manuel man find
)
- exec command {} + Cette variante de l'action -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est créée en ajoutant chaque nom de fichier sélectionné à la fin. Le nombre total d'invocations de la commande sera bien inférieur au nombre de fichiers correspondants. La ligne de commande est construite de la même manière que xargs construit ses lignes de commande. Une seule instance de '{} 'est autorisé dans la commande. La commande est exécutée dans le répertoire de départ.