Rinominare la directory corrente da una shell - possibile?


24

È possibile rinominare l'attuale directory di lavoro da una shell (Bash nel mio caso particolare)? Se provo a farlo nel modo più semplice, finisco con un errore:

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

C'è un altro modo per farlo senza cambiare la directory corrente? Mi rendo conto che posso farlo facilmente cambiando nella directory principale, ma sono curioso di sapere se è necessario. Dopotutto, se rinomino la directory da un'altra shell, posso ancora creare i file nella shell originale in seguito.

Risposte:


41

Sì, ma devi fare riferimento alla directory per nome, non usando la .notazione. Puoi usare un percorso relativo, deve solo finire con qualcosa di diverso da .o ..:

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

Puoi usare un percorso assoluto:

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

Allo stesso modo, rmdir .non funzionerà mai, ma rmdir "$PWD"funziona.


Perfetto ... esattamente la risposta che speravo.
Nathan Osman

5
Il problema di base è che non ti è permesso rimuovere o rinominare lo speciale "." e ".." nomi.
Barmar


1

E dipende da come si definisce "cambiare la directory corrente".

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

genera una subshell e cambia la directory corrente nella subshell, ma lascia la shell primaria dov'era.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.