È 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.