Renommer le répertoire courant à partir d'un shell - possible?

24

Est-il possible de renommer le répertoire de travail actuel à partir d'un shell (Bash dans mon cas particulier)? Si j'essaie de le faire de manière simple, je me retrouve avec une erreur:

nathan@nathan-desktop:/tmp/test$ mv . test2
mv: cannot move ‘.’ to ‘test2’: Device or resource busy

Existe-t-il une autre façon de procéder sans changer le répertoire actuel? Je me rends compte que je peux facilement accomplir cela en passant au répertoire parent, mais je suis curieux de savoir si cela est nécessaire. Après tout, si je renomme le répertoire à partir d'un autre shell, je peux toujours créer des fichiers dans le shell d'origine par la suite.

Nathan Osman
la source

Réponses:

41

Oui, mais vous devez vous référer au répertoire par son nom, pas en utilisant la .notation. Vous pouvez utiliser un chemin relatif, il doit juste se terminer par autre chose que .ou ..:

/tmp/test$ mv ../test ../test2
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

Vous pouvez utiliser un chemin absolu:

/tmp/test$ cd -P .
/tmp/test2$ mv "$PWD" "${PWD%/*}/test3"
/tmp/test2$ 

De même, rmdir .ne fonctionnera jamais, mais rmdir "$PWD"fonctionne.

Gilles 'SO- arrête d'être méchant'
la source
Parfait ... exactement la réponse que j'espérais.
Nathan Osman
5
Le problème de base est que vous n'êtes pas autorisé à supprimer ou renommer le "" spécial. et les noms "..".
Barmar
2

Comme dans la réponse @Gilles mais en utilisant l' expansion d'accolade pour plus de brièveté:

mv ../{test,test2}
robstarbuck
la source
1

Et cela dépend de la façon dont vous définissez «changer le répertoire courant».

/tmp/test$ (cd .. && mv test test2)
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

génère un sous-shell et modifie le répertoire actuel dans le sous-shell, mais laisse votre shell principal où il était.

G-Man dit «Réintègre Monica»
la source