Rinominare la directory corrente da una shell – possibile?

È possibile rinominare la directory di lavoro corrente dallinterno di una shell (Bash nel mio caso particolare)? Se provo a farlo in modo semplice, mi ritrovo 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 passando alla directory principale, ma sono curioso di sapere se è necessario. Dopo tutto, se rinomino la directory da unaltra shell, posso ancora creare file nella shell originale in seguito.

Risposta

Sì, ma devi fare riferimento alla directory per nome, non utilizzando .. Puoi utilizzare un percorso relativo, deve solo terminare con qualcosa di diverso da . o ..:

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

Puoi utilizzare 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" sì.

Commenti

  • Perfetto … esattamente la risposta che speravo.
  • Il problema di base è che ' non sei autorizzato a rimuovere o rinominare lo speciale ". " e .. " nomi.

Risposta

Come nella risposta di @Gilles ma utilizzando espansione delle parentesi graffe per brevità:

 mv ../{test,test2}  

Risposta

E dipende da come si definisce “modifica della 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 dovera.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *