la barra (/) dopo un nome di directory sui comandi della shell


14

Ho una piccola domanda qui.

Se avessi due file, dire fileae fileb, mv filea filebsarebbe

  • Elimina fileb
  • rinominare fileainfileb

Quindi se avessi due directory, diciamo dirae dirb, lo mv dira dirbfarei

  • spostare dirain dirb(diventerà dirb/dira)

Notando che in entrambi i casi non ci sono avvisi o messaggi, questo è abbastanza incoerente per me. Penso che mv dira dirbdovrei semplicemente sovrascrivere dirbil contenuto di dira(o unire le due directory in una directory chiamata dirb).

Ricordo di aver letto da qualche parte che un nome di directory con una barra (come dira/) viene trattato come una directory e un nome senza barra (come dira) viene trattato come un file (in certa misura, ovviamente). Comunque ora voglio fare in modo che la shell (zsh e possibilmente bash) rispettino la mia notazione di una directory usando una barra. Esiste un'opzione terminale che mi consente di applicarla?

Per chiarire, ecco il mio comportamento desiderato:

  • mv dira dirbrisulta dirbessere sovrascritto con il contenuto didira
  • mv dira dirb/risulta diraessere spostato in dirb(in dirb/dira)

Qualcuno ha pensato allo stesso modo di me? O sono solo strano?


2
Penso che il tuo comportamento desiderato sarebbe piuttosto pericoloso.
Starblue,

@starblue: sì, sono d'accordo che sia pericoloso, ma preferirei vivere con qualcosa di pericoloso, piuttosto che incoerenza
phunehehe

Risposte:


11

Sì, questo è un po 'incoerente, anche all'interno degli strumenti GNU.

Un problema con la proposta è che le directory non vuote non possono essere rimosse. A parte questo, -T(in GNU land, comunque) approssima quello che vuoi (il primo caso):

$ ls dira/ dirb/
dira/:
a

dirb/:
b
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
mv: cannot move `dira/' to `dirb/': Directory not empty
$ rm dirb/b 
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
$ ls dira/ dirb/
ls: cannot access dira/: No such file or directory
dirb/:
a

Puoi anche aggiungere un alias, ad es alias ren=mv -T.
Mikel,

0

Se vuoi semplicemente spostare qualsiasi cosa da dira a dirb puoi eseguire mv dira/* dirb.

Come da pagina man mv sul mio HP-UX.

The mv command moves:

+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).


3
Al tuo comando mancherebbero tutti i dotfile.
qbi

Chi ha comunque bisogno di file dot;)
Robert Massaioli,

1
E se è un problema, shopt -s dotglobin bash lo risolverà.
David Z,
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.