Est-il possible de contourner ce problème?
J'ai une situation où j'ai besoin de déplacer certains fichiers dans l'un des répertoires ci-dessous.
/a/b/c/d/e/f/g
le problème est que le nom du fichier dans le répertoire g/
est identique au nom du répertoire
et je reçois l'erreur suivante:
mv: cannot overwrite directory `../297534' with non-directory
Exemple: /Home/user/data/doc/version/3766/297534 est un répertoire. À l'intérieur, vous trouverez également un fichier nommé 297534.
j'ai donc besoin de déplacer ce fichier dans/home/user/data/doc/version/3766
Commande Voici ce que je lance: (dans une boucle for)
cd /home/user/data/doc/version/3766/297534
mv * ../
Vous ne pouvez pas forcer mv à écraser un répertoire avec un fichier portant le même nom. Vous devrez supprimer ce fichier avant d'utiliser votre commande mv.
Ajoutez un autre calque dans votre boucle.
Remplacez mv * ../
par
for f in `ls`; do rm -rf ../$f; mv $f ..; done
Cela garantira que tout conflit sera supprimé en premier, en supposant que vous ne vous souciez pas du répertoire que vous écrasez.
Notez que va exploser si vous avez un fichier dans le répertoire actuel qui correspond au nom du répertoire actuel. Par exemple, si vous êtes dans /home/user/data/doc/version/3766/297534
et que vous essayez de déplacer un répertoire appelé 297534
vers le haut. Une solution consiste à ajouter un long suffixe à chaque fichier, de sorte qu'il y a peu de chances qu'une correspondance soit trouvée.
for f in `ls`; do mv $f ../${f}_abcdefg; done