В чем разница между именем каталога, которое заканчивается косой чертой, а другая – нет?
Существует ли какая-либо разница между именем каталога, таким как
mydirectory
а также
- Получить `scp path /` вести себя как `rsync path /`
- Это нормально, что поиск отображает двойную прямую-косую черту?
- Какие причины ln: //: есть ли каталог?
- слэш (/) после имени каталога в командах оболочки
- Есть ли какая-либо разница w / v / sw / o "./" в относительном пути?
mydirectory/
Я заметил, что это происходит, когда я выполняю ls
в некоторых каталогах – некоторые из названий каталогов имеют косую черту, а некоторые нет. Это проблематично, потому что, если я хочу получить доступ к файлу, содержащемуся в каталоге, мне может понадобиться добавить косую черту в конце:
vi $mydirectory"/"$myfile
или просто
vi $mydirectory$myfile
3 Solutions collect form web for “В чем разница между именем каталога, которое заканчивается косой чертой, а другая – нет?”
Без /
это может быть файл.
В некоторых ситуациях это может быть смертельно опасно. Например, при использовании mv
:
mv file1 mydirectory mv file2 mydirectory mv file3 mydirectory
Отлично? Но если mydirectory
не существовал или не был каталогом, конечным результатом является то, что file1
и file2
исчезли, а mydirectory
теперь называется mydirectory
.
mv file1 mydirectory/ mv file2 mydirectory/ mv file3 mydirectory/
Если mydirectory
не существует, все, что вы получаете, это три сообщения об ошибках, а файлы file1
, file2
и file3
все еще существуют.
Таким образом, /
устраняет некоторую двусмысленность.
Кроме того, на самом деле нет никаких правил. Некоторые программы могут вести себя по-разному в зависимости от того, поставили ли вы /
в конце или нет. Им решать, что с этим делать.
В некоторых случаях вы также получаете проблемы, если используете слишком много /
. Например, find
сохраняет избыток /
в своем выходе, что может вас опрокинуть, если вы попытаетесь найти файлы / пути, используя простые сравнения строк, а не, скажем, realpath
или что-то в этом роде.
Вероятно, это будет «отображение» с ls
, т. ls
Если вы выполняете ls -p
или ls -F
, он должен последовательно добавлять косую черту после каталогов. Это существенно добавляет визуальные подсказки относительно того, что он считает файлом. (Имейте в виду, что -F
также, например, добавляет @
к символическим ссылкам, *
к файлам с исполняемыми разрешениями, |
к именованным трубам, =
к сокетам и т. Д.). Вы также можете воспроизвести ls -d directory/
vs ls -d directory
.
/
и \0
Я считаю, что только два символа недействительны в имени файла / каталога.
Всегда добавление косой черты должно быть безопасным, если вы правильно назначили mydirectory и myfile, то vim "$mydirectory/$myfile"
должен делать то, что вы ожидаете. (С предостережением $mydirectory
и $myfile
которые были назначены правильно). foo/bar
и foo//bar
должен быть эквивалентным.
В общем; Мне очень не нравится назначать вывод ls переменным и работать с ним, в первую очередь потому, что я раньше был удивлен, когда персонажи попали в имена файлов в сочетании с отсутствием цитирования, в результате получились деструктивные результаты. (Ie prefix=/home user=" oops" rm -rf $prefix$user
, который закончит рекурсивно удалять /home
, а затем пытается рекурсивно удалить ./oops
).
Вместо использования ls я стараюсь, когда могу, полагаться на расширение glob, bash или find -print0 | xargs -0
find -print0 | xargs -0
. Если вы используете ls
, убедитесь, что вы НЕ используете существующий псевдоним для ls
, и вы используете параметры отображения, которые соответствуют вашей конкретной задаче.
Если вы думаете о каталогах или папках в контексте «причудливого имени файла», папка по-прежнему является файлом, но папка скорее является указателем на контейнер, такой как папка с файлами в вашем шкафу подачи, поэтому, если вы обозначаете или используете косую черту / "или косой чертой" /. " для скрипта полезно знать, что вы не имеете в виду файл, а не папку.
Надеюсь, это имеет смысл.