Назад | Перейти на главную страницу

Есть ли большая разница между / this / is / a / path и / this / is / a / path /?

Я пользуюсь CentOS уже много лет, но я до сих пор часто не понимаю, какое значение имеет последняя косая черта в командах Linux, например

В чем разница между путями, заканчивающимися и не заканчивающимися косой чертой?

Ответ - «это зависит от обстоятельств». Многие команды не заботятся о них, хотя это меняется, если имя файла является символической ссылкой на каталог. С косой чертой в конце большинство команд будет использовать каталог, на который указывает символическая ссылка, без косой черты в конце команда будет использовать саму символическую ссылку.

Некоторые команды вроде rsync ведут себя совершенно иначе, когда есть завершающая косая черта, например, указание завершающей косой черты на исходной стороне rsync скопирует содержимое каталога на другой сервер в указанном месте назначения. Без этого каталог создается в месте назначения, а затем содержимое копируется в него. Если сомневаетесь, прочтите документацию (поиск по слову "трейлинг" - хорошее начало).

правда в том, что это обычно зависит от запущенной команды

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

man rsync

Я не уверен на 100%, как косая черта влияет на cp, mv, rm, хотя, по моему опыту, это не имеет никакого практического эффекта.

например

Бег

cp -r dir1 dir2

даст вам тот же результат, что и

cp -r dir1 / dir2

Это определенно важно для rsync. В rsync разница между включением и отсутствием завершающей косой черты заключается в различии между синхронизацией содержимого каталога или самого каталога и содержимого.

например

rsync -a dir1 dir2

создаст dir1 под dir2

пока

rsync -a dir1 / dir2

создаст копии любых файлов в dir1 прямо в dir2

Это действительно зависит от программы. Например, find будет следовать за символической ссылкой на пути с косой чертой в конце.

mkdir dir1 ln -s dir1 dir2

найти dir2 -тип d

ничего не вернет

найти dir2 / -тип d

найдет "dir2 /" и продолжит рекурсию через dir1.