slash (/) setelah nama direktori pada perintah shell

14

Saya punya sedikit pertanyaan di sini.

Jika saya memiliki dua file, katakan fileadan fileb, mv filea filebakan

  • menghapus fileb
  • ganti nama fileamenjadifileb

Maka jika saya memiliki dua direktori, katakan diradan dirb, mv dira dirbakan

  • pindah dirake dirb(itu akan menjadi dirb/dira)

Memperhatikan bahwa dalam kedua kasus tidak ada pemberitahuan atau pesan, maka ini sangat tidak konsisten bagi saya. Saya pikir mv dira dirbharus menimpa dirbdengan isi dira(atau menggabungkan dua direktori di bawah direktori bernama dirb).

Saya ingat pernah membaca di suatu tempat bahwa nama direktori dengan garis miring (seperti dira/) diperlakukan seperti direktori, dan nama tanpa garis miring (seperti dira) diperlakukan seperti file (tentu saja sampai batas tertentu). Pokoknya sekarang saya ingin membuat shell (zsh dan mungkin bash) menghormati notasi direktori saya dengan menggunakan slash. Apakah ada opsi terminal yang memungkinkan saya untuk menerapkannya?

Untuk memperjelas, inilah perilaku yang saya inginkan:

  • mv dira dirbhasil dirbditimpa dengan kontendira
  • mv dira dirb/hasil diradipindahkan ke dirb(di dirb/dira)

Adakah yang berpikir dengan cara yang sama dengan saya? Atau aku hanya aneh?

phhehehe
sumber
2
Saya pikir perilaku yang Anda inginkan akan agak berbahaya.
starblue
@ starblue: ya saya setuju itu berbahaya, tapi saya lebih suka hidup dengan sesuatu yang berbahaya, daripada inkonsistensi
phunehehe

Jawaban:

11

Ya, ini agak tidak konsisten, bahkan di dalam alat GNU.

Satu masalah dengan proposal Anda adalah bahwa direktori yang tidak kosong tidak dapat dihapus. Terlepas dari itu, -T(di tanah GNU, bagaimanapun) mendekati apa yang Anda inginkan (kasus pertama):

$ 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
tepang
sumber
Anda juga bisa menambahkan alias, mis alias ren=mv -T.
Mikel
0

Jika Anda hanya ingin memindahkan semuanya dari dira ke dirb, Anda dapat menjalankannya mv dira/* dirb.

Sesuai halaman manual pada HP-UX saya.

The mv command moves:

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

Hemant
sumber
3
Perintah Anda akan kehilangan semua file dot.
qbi
Lagi
1
Dan jika itu masalah, shopt -s dotglobdi bash akan memperbaikinya.
David Z