Когда следует использовать конечную косую черту в каталоге?

Возможный дубликат:
Как linux обрабатывает несколько разделителей путей (/ home //// имя пользователя /// file)

Большинство команд, которые я использую в linux, ведут себя одинаково, независимо от того, включаю ли я конечный слэш / символ в конце имени каталога или нет.

Например:

 ls /home/cklein ls /home/cklein/ cp foo bar cp foo/ bar/ 

Когда это завершающее косая черта? Что такое семантический смысл конечной косой черты?

4 Solutions collect form web for “Когда следует использовать конечную косую черту в каталоге?”

Он полностью зависит от инструмента. rm не позволит вам удалить символическую ссылку в каталог, если в конце есть косая черта, а rsync выполняет разные вещи, если спецификация исходного файла имеет косую черту в конце.

Одним хорошим примером является перемещение файла в каталог:

 mv some_file foo 

против

 mv some_file foo/ 

Если foo не существует, первый переименует some_file в foo , а не в предполагаемый foo/some_file ; второй будет жаловаться, а это то, что вы хотите.

Если foo существует, но не является каталогом, первый может скрыть файл foo ; снова, второй будет жаловаться.

cp представляет аналогичные проблемы.

Работая над некоторыми старыми версиями SunOS, я разработал привычку добавлять /. , потому что система фактически игнорировала конечное / имя файла; например, /etc/motd/ будет ссылаться на файл, а не на ошибку. Более поздние версии SunOS / Solaris, похоже, не имеют этой проблемы.

foo/ как foo/. , так что если foo является символической ссылкой на каталог, foo/ является каталогом (а не символической ссылкой), и если foo не является каталогом или символической ссылкой на каталог, то вы получаете ошибку ENOTDIR для чего-либо, пытающегося получить доступ к foo/ . Это поведение в Linux.

Поведение может отличаться в других системах.

Смотрите здесь и здесь и здесь, чтобы узнать, что POSIX / SUS может сказать об этом.

В rsync страница руководства выглядит следующим образом:

  A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination. You can think of a trailing / on a source as meaning "copy the contents of this directory" as opposed to "copy the directory by name", but in both cases the attributes of the containing directory are transferred to the contain- ing directory on the destination. In other words, each of the follow- ing commands copies the files in the same way, including their setting of the attributes of /dest/foo: rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo 

Конечная косая черта в пункте назначения не имеет значения. Только по источнику. (И тогда, конечно, это имеет значение только в том случае, если источником является каталог, а не один файл или глобус.)

Чтобы проиллюстрировать каталог в случае использования каталога:

 $ mkdir foo bar baz $ chmod 700 foo $ chmod 750 bar $ chmod 705 baz $ echo hello > foo/file1 $ chmod 606 foo/file1 $ ls -n total 0 drwxr-x--- 2 501 20 68 Aug 8 15:29 bar/ drwx---rx 2 501 20 68 Aug 8 15:29 baz/ drwx------ 3 501 20 102 Aug 8 15:30 foo/ $ ls -n foo total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 $ rsync -a foo bar $ rsync -a foo baz/ $ rsync -a foo bif $ rsync -a foo bonk/ $ ls -n total 0 drwxr-x--- 3 501 20 102 Aug 8 15:30 bar/ drwx---rx 3 501 20 102 Aug 8 15:30 baz/ drwxr-xr-x 3 501 20 102 Aug 8 15:30 bif/ drwxr-xr-x 3 501 20 102 Aug 8 15:30 bonk/ drwx------ 3 501 20 102 Aug 8 15:30 foo/ $ ls -n * bar: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ baz: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ bif: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ bonk: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ foo: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 $ rm -rf b* $ mkdir bar baz $ chmod 750 bar $ chmod 705 baz $ rsync -a foo/ bar $ rsync -a foo/ baz/ $ rsync -a foo/ bif $ rsync -a foo/ bonk/ $ ls -n total 0 drwx------ 3 501 20 102 Aug 8 15:30 bar/ drwx------ 3 501 20 102 Aug 8 15:30 baz/ drwx------ 3 501 20 102 Aug 8 15:30 bif/ drwx------ 3 501 20 102 Aug 8 15:30 bonk/ drwx------ 3 501 20 102 Aug 8 15:30 foo/ $ ls -n * bar: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 baz: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 bif: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 bonk: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 foo: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 $ 
  • для + array + args
  • Создание дубликата пути в Unix
  • поиск абсолютного каталога
  • Найти общий размер определенных файлов в ветке каталога
  • удалить файлы журналов
  • Странное имя каталога, показанное обратным слэшем
  • Как интерпретация оболочки ././command-name?
  • Лучший каталог для общих скриптов
  • Каталог кэша и список файлов, чтобы предотвратить доступ к жесткому диску при просмотре содержимого
  • в чем разница между установкой через командную строку и использованием графического интерфейса?
  • Расположение, запуск и мониторинг сервера
  • Interesting Posts

    sed повторяет последнюю строку в потоке

    В чем разница между выводами dmesg и / var / log / messages?

    Как я могу сказать dict для вывода из подмножества словарей?

    После потери соединения ssh с полем с запуском tmux оболочка искажается

    MySQL Workbench Не удается запустить диспетчер туннелей SSH

    Как отключить плавную прокрутку в KDE4

    Как заблокировать общие пароли в системах UNIX?

    Приостановка ноутбука не работает ~ 50% времени

    apt: установить пакеты, загруженные ранее

    Создание / удаление символической ссылки при подключении / отключении устройства USB

    Как установить пакеты ОС используя yum?

    Экран заставки KDE не исчезает

    Извлечение определенной папки из tarball – как я могу рассказать, где выложить файл после его извлечения?

    Как передать файл с удаленного сервера на локальный компьютер

    Количество строк с определенным значением в столбце для всех файлов в каталоге рекурсивно

    Linux и Unix - лучшая ОС в мире.