la barra inclinada (/) después de un nombre de directorio en comandos de shell

14

Tengo una pequeña pregunta aquí.

Si tengo dos archivos, digamos fileay fileb, mv filea filebsería

  • Eliminar fileb
  • renombrar fileaafileb

Entonces, si tengo dos directorios, digamos diray dirb, mv dira dirbsería

  • moverse diraen dirb(que se convertirá en dirb/dira)

Observando que en ambos casos no hay aviso o mensaje, entonces esto es bastante inconsistente para mí. Creo que mv dira dirbdebería sobrescribir dirbcon el contenido de dira(o fusionar los dos directorios en un directorio llamado dirb).

Recuerdo haber leído en alguna parte que el nombre de un directorio con una barra inclinada (like dira/) se trata como un directorio, y el nombre sin barra inclinada (like dira) se trata como un archivo (en cierta medida, por supuesto). De todos modos, ahora quiero hacer que el shell (zsh y posiblemente bash) respete mi notación de un directorio mediante una barra inclinada. ¿Existe una opción de terminal que me permita hacer cumplir eso?

Para aclarar, aquí está mi comportamiento deseado:

  • mv dira dirbda como resultado que dirbse sobrescriba con el contenido dedira
  • mv dira dirb/resulta en diraser trasladado a dirb(in dirb/dira)

¿Alguien ha pensado lo mismo que yo? ¿O simplemente soy raro?

phunehehe
fuente
2
Creo que tu comportamiento deseado sería bastante peligroso.
Starblue
@starblue: sí estoy de acuerdo que es peligroso, pero yo prefiero vivir con algo peligroso, que la inconsistencia
phunehehe

Respuestas:

11

Sí, esto es un poco inconsistente, incluso dentro de las herramientas de GNU.

Un problema con su propuesta es que los directorios no vacíos no se pueden eliminar. Aparte de eso, -T(en tierra GNU, de todos modos) se aproxima a lo que quieres (el primer 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
tshepang
fuente
También puede agregar un alias, por ejemplo alias ren=mv -T.
Mikel
0

Si solo quieres mover todo, desde dira a dirb, puedes ejecutarlo mv dira/* dirb.

Según la página de manual de mv en mi HP-UX.

The mv command moves:

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

Hemant
fuente
3
Su comando echaría de menos todos los archivos de puntos.
qbi
¿Quién necesita archivos dot de todos modos;)
Robert Massaioli
1
Y si es un problema, shopt -s dotgloben bash lo arreglará.
David Z