Как удалить или получить доступ к файлу с обратной ячейкой \ в его имени?

Если вы думаете, что сеть на вашем конце работает довольно быстро, подтвердите это с помощью таких сайтов, как SpeedTest. Если вы правы, проверьте производительность системы, к которой вы подключаетесь, она может быть перегружена. Кроме того, такие утилиты, как ping, traceroute и т. Д., Могут помочь вам проверить перегрузку, если таковая имеется, как было предложено выше @Jakuje. Вы также можете использовать Wireshark, чтобы получить более реалистичное представление о том, что происходит с вашими пакетами.

3
14.08.2018, 23:09
3 ответа

Что вам действительно нужно сделать, так это исправить ваш сценарий, чтобы он преобразовывал пути Windows в пути Unix. Один относительно простой способ сделать это — убрать разделители путей из уравнения :, а не указывать полные имена путей для копирования.вы рекурсивно просматриваете каталоги, создавая целевые каталоги на удаленной стороне и указывая только имя файла, а не полный путь.:)

Но пока вы не дойдете до этого момента, вам нужно защитить обратную косую черту от оболочки. Вы можете сделать это, заключив в кавычки одинарные кавычки (обратная косая черта интерпретируется для некоторых символов внутри двойных кавычек ). Обратите внимание, что подстановочный знак находится вне кавычек, поэтому оболочка обрабатывает его как подстановочный знак, а не как литерал*::)

rm -rv '.\'*

Или вы можете сделать это, избегая обратной косой черты (, что также будет работать в двойных кавычках, но здесь двойные кавычки не нужны):

rm -rv.\\*

Я бы посоветовал, прежде чем удалять данные с помощью подстановочного знака, всегда сначала запускать lsс теми же аргументами, а затем использовать стрелку вверх, чтобы вызвать последнюю команду, где вы можете изменить lsна rm. Таким образом, вы сможете увидеть список файлов до того, как они будут удалены, что предотвратит потенциально серьезную ошибку. :)Я также большой поклонник использования -vс rmв подобных случаях.

sauer@lightning:/tmp> ls -vr.\\*
.\innerfile\gitkeep .\gitkeep

.\innerfile:
sauer@lightning:/tmp> rm -vr.\\*
removed '.\gitkeep'
removed directory '.\innerfile'
removed '.\innerfile\gitkeep'
5
27.01.2020, 21:12

Так как имена файлов содержат escape-символ \, вам нужно экранировать этот escape-символ.

rm.\\gitkeep.\\innerfile\\gitkeep
rmdir.\\innerfile 

удалит ваши файлы

2
27.01.2020, 21:12

Если ничего не помогло, вы можете сделать следующее, чтобы удалить файлы и папки, в именах которых есть обратная косая черта или странные символы:

rm -iR *

Приведенная выше команда запустит процесс удаления всего в папке, в которой вы находитесь. Однако перед удалением каждого файла или папки появится запрос :

.
rm: remove regular file `.\gitkeep? y
rm: remove regular file `.\innerfile\gitkeep'? y

Вам нужно будет ввести «y» и нажать [Enter] для каждого файла или папки, которые вы хотите удалить. Если вы встретите файл или папку, которые НЕ хотите удалять, введите «n» и нажмите [Enter].

Если вам по-прежнему предлагается указать все оставшиеся файлы и папки, но вы уже удалили то, что хотели, просто нажмите следующую комбинацию клавиш:

[Ctrl] + [c]
1
30.12.2020, 01:23

Теги

Похожие вопросы