Я пользуюсь 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.