Як читати тире-файли


15

Як я можу прочитати тире-файл з терміналу, крім того, щоб розмежувати його ./

Наприклад, для читання a - fileми можемо прочитати його

cat ./-file_name

З: Чи існує альтернативний спосіб досягти того самого?


4
рекомендований спосіб - це фактично використовувати ./префікс. Це найпортативніший (див. Поширені питання про Unix епохи Usenet)
Олів'є Дулак

find . -name "-filename" | xargs catвідправить ./-name ім'я через трубу. У вашому (спрощеному?) Випадку помилка, але це може допомогти у великих каталогах / сценаріях.
Вальтер А

Відповіді:


11

Для команд, які отримують дані від stdin, ви можете використовувати перенаправлення:

cat <-file_name

у вас це працює :) Так що у мене є 3 способи прочитати їх один за допомогою.
Віджан

22

Використовуйте подвійний, --щоб позначити кінець опцій:

cat -- -<FILENAME>

Інші програми , такі як touch, rmабо git checkoutж слідувати цій угоді:

$ touch -- -file
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:13 -file
$ echo hi! >> -file
$ cat -- -file
hi!
$ rm -- -file
$ echo $?
0

УВАГА: Це хороша практика , щоб завжди використовувати --після того, як rmв сценарії. Зловмисник може розмістити --rfфайл у каталозі та rm *прийматиме його як параметри запуску. Дивіться це:

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm *
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:21 -rf

На жаль, це не ми маємо на увазі, ми не хотіли видаляти каталоги. Ми повинні були використовувати --:

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm -- *
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir

3
Ви не можете розраховувати на реалізацію кожної програми --: багато хто робить, але не всі.
Гленн Джекман

2
Дійсно? Я не сказав, що всі програми реалізовують --, я сказав, що це робиться.
Аркадіуш Драбчик

1
@vidhan: Я не знаю жодного іншого варіанту.
Аркадіуш Драбчик

1
@vidhan ви також можете ускладнювати своє життя без будь-яких причин і робити щось на кшталт, find . -name '-file_name' -exec cat {} \;але насправді це не так багато сенсу.
тердон

2
Це не працює, якщо файл названий -і нічого іншого? Це з'явилося у програмі wargame: overthewire.org/wargames/bandit/bandit2.html
ThisClark

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