косою рисою (/) після імені каталогу в командах оболонки


14

У мене тут невелике запитання.

Якщо у мене є два файли, скажімо , fileaі fileb, mv filea filebбуде

  • видалити fileb
  • перейменувати fileaвfileb

Тоді , якщо у мене є два каталоги, скажімо , diraі dirb, mv dira dirbб

  • перейти diraв dirb(це буде dirb/dira)

Зауваживши, що в обох випадках немає повідомлення або повідомлення, то це для мене досить непослідовно. Думаю, mv dira dirbслід просто перезаписати dirbвміст dira(або об'єднати два каталоги в каталозі з назвою dirb).

Я пам’ятаю, що десь читав, що ім’я каталогу з косою рисою (як dira/) трактується як каталог, а ім’я без косої риси (як dira) трактується як файл (звичайно, певні розширення). У будь-якому разі я хочу, щоб оболонка (zsh і, можливо, bash) поважала моє позначення каталогу за допомогою косої риски. Чи є термінальний варіант, який дозволяє мені це застосувати?

Для уточнення, ось моя бажана поведінка:

  • mv dira dirbпризводить до dirbперезапису вмістуdira
  • mv dira dirb/призводить до diraпереміщення dirbdirb/dira)

Хтось думав так само, як я? Або я просто дивний?


2
Я думаю, що ваша бажана поведінка була б досить небезпечною.
starblue

@starblue: так, я погоджуюся, що це небезпечно, але я б краще жив з чимось небезпечним, ніж непослідовність
phunehehe

Відповіді:


11

Так, це трохи непослідовно, навіть у межах інструментів GNU.

Одна з проблем вашої пропозиції полягає в тому, що непусті каталоги неможливо видалити. Окрім цього, -T(у будь-якому випадку GNU земля) приблизно визначає те, що ви хочете (перший випадок):

$ 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

Ви також можете додати псевдонім, наприклад alias ren=mv -T.
Мікель

0

Якщо ви просто хочете перенести все від dira до dirb, можете запуститись mv dira/* dirb.

Згідно з рівною сторінкою на моєму HP-UX.

The mv command moves:

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


3
Ваша команда пропустила б усі точки.
qbi

Кому все одно потрібні файли з крапками;)
Роберт Массайолі

1
І якщо це питання, shopt -s dotglobв баші це виправлять.
David Z
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.