Table of Contents
Bash Управление файлами содержащих спецсимволы в именах
Имена файлов
Пример наиболее распространенных имен файлов:
abc.txt avi.txt debian.txt # Пример имен содержащих числа 121.txt 3221.txt 674659.txt # буквенно-цифровые eg84235.txt 3kf43nl2.txt 2323ddw.txt
Также, менее распространенные, но все же встречающиеся файла, содержащие спец символы в имени:
#232.txt #bkf.txt #bjsd3469.txt #121nkfd.txt -2232.txt -fbjdew.txt -gi32kj.txt --321.txt --bk34.txt
Имена содержащие тире ( - )
Есть два способа создать имя файла содержащие <html>-</html>
touch -- -abc.txt # or touch ./-abc.txt
Чтобы переименовать такой файл используем такую конструкцию
mv -- -abc.txt -a.txt
А для удаления, такую:
rm -- -abc.txt # or rm ./-abc.txt
Если есть несколько файлов, содержащих тире, которые нужно удалить, выполним:
rm ./-*
Одна важная вещь, на которую стоит обратить внимание в примере выше, под действие команды удаления попадут все файлы содержащие тире. Не только в начале, а в любой части мени. А именно, <html>-abc.txt</html>, <html>ab-c.txt</html>, <html>abc-.txt</html> и т. д.
Имена содержащие hash (#)
Известно, что символ <html>#</html>, интерпретируется в dash как комментарий. А следовательно игнорируется. При попытке создать такой файл, получим:
touch #hash-name.file touch: missing file operand Try 'touch --help' for more information.
Bash интерпретирует комментарий <html>#abc.txt</html> и, следовательно, игнорирует его. Таким образом, команда touch была передана без какого-либо файлового операнда, и следовательно, ошибка.
Для устранить такую ошибку, вы можете попросить BASH не интерпретировать <html>#</html> как комментарий:
touch ./#abc.txt # or touch '#abc.txt'
Если попробовать создать сразу несколько файлов:
touch a.txt #bc.txt
То будет создан только один – <html>a.txt</html>, <html>#bc.txt</html> был проигнорирован, но при этом, без сообщения об ошибке. Для группового создания файлов с такими именами, действуем таким образом:
touch a.txt ./#bc.txt # or touch a.txt '#bc.txt'
Стандартные файловые операции:
# Перемещение mv ./#bc.txt ./#cd.txt # or mv '#bc.txt' '#cd.txt' # Копирование cp ./#cd.txt ./#de.txt # or cp '#cd.txt' '#de.txt' # Удаление rm ./#bc.txt # or rm '#bc.txt' # Чтобы удалить все файлы с решеткой rm ./#*
Имена содержащие точку с запятой ( ; )
В bash, точка с запятой, действует как разделитель, позволяя выполнять несколько команд за один раз. Если попробуем создайте имя файла начинающиеся с <html>;</html>, получим вот такое сообщение:
touch ;abc.txt touch: missing file operand Try 'touch --help' for more information. abc.txt: command not found
Причина вышеуказанной ошибки заключается в том, что bash интерпретирует touch как команду, но не может найти ни одного файлового операнда перед точкой с запятой и следовательно, сообщает об ошибке. bash также сообщает о другой ошибке, что команда <html>abc.txt</html> не найдена, только потому, что после точки с запятой bash ожидал другую команду, а <html>abc.txt</html> которая не является командой.
Чтобы устранить эту ошибку, укажем bash, не интерпретировать точку с запятой как разделитель команд:
touch ./';abc.txt' # or touch ';abc.txt'
Имя файла заключенное в одинарные кавычки <html>''</html>, сообщает bash, что <html>;</html> это часть имени файла, а не разделитель команд.
Другие специальные символы в имени файла/директории
Знак плюс ( + ) в имени файла
Не требует никаких дополнительных телодвижений.
touch +2308.txt
Знак доллар ( $ ) в имени файла
Следует заключить имя файла в одинарные кавычки, как это ранее делали в случае с точкой с запятой:
touch '$2308.txt'
Asterisk ( * ) в имени файла
Наличие asterisk-а в имени файла ничего не меняет, работаем как с обычным файлом:
touch *2308.txt
Но, есть нюансы. Когда будет нужно удалить файл, который начинается с <html>*</html>, никогда не используем следующею команду:
rm * # or rm -rf *
Удаляем таким образом:
rm ./*.txt
Процент ( % ) в имени файла
Ничего дополнительного делать не нужно:
touch %2308.txt
Восклицательный знак ( ! ) в имени файла
заключаем имя файла в одинарные кавычки:
touch '!2308.txt'
Сaret ( ^ ) в имени файла
Nothing to do
touch ^2308.txt
Амперсанд ( & ) в имени файла
одинарные кавычки:
touch '&2308.txt'
Скобки ( ) в имени файла
одинарные кавычки: touch '(2308.txt)'
Фигурные скобки { } в имени файла
Дополнительного полива не требуют
touch {2308.txt}
Шевроны < > в имени файла
Одинарные кавычки:
touch '<2308.txt>'
Квадратные скобки [ ] в имени файла
Этим ребятам ничего не нужно:
touch [2308.txt]
Подчеркивание ( _ ) в имени файла
touch _2308.txt
Равно ( = ) в имени файла
touch =2308.txt
back slash ( \ ) в имени файла
back slash указывает оболочке игнорировать следующий символ. В одинарные кавычке
touch '\abc.txt'
Вопросительный знак ( ? ) в имени файла
touch ?2308.txt
Точка ( . ) в имени файла
в Linux, файлы, начинающиеся с точки <html>.</html>, являются особенными и называются dot-файлами. Это скрытые файлы, как правило, конфигурационные или системные файлы. Для просмотра таких файлов необходимо использовать флаг <html>-a</html> или <html>-A</html> в команде ls.
Создание такого файла ничем не примечательна:
touch .2308.txt
В Linux, в имени файла может быть столько точек, сколько необходимо. В отличие от других OS, точка в имени файла не является разделителем имени и расширения:
touch 1.2.3.4.5.6.7.8.9.10.txt
Запятая ( , ) в имени файла
touch ,12.txt # or touch ,12,.txt
Двоеточие ( : ) в имени файла
touch :12.txt # or touch :12:.txt
Кавычки (одинарные и двойные) в имени файла
Чтобы в имени файла были кавычки, нужно использовать правило обмена. То есть, если нужны одинарные кавычки в имени файла, заключаем имя файла в двойные кавычки, а если нужно иметь двойные кавычки в имени файла, заключите его в одинарные кавычки.
touch "15'.txt" # and touch '15”.txt'
Тильда ( ~ ) в имени файла
touch ~1a.txt # or touch 2b~.txt
Пробел в имени файла
touch hi\ my\ name\ is\ nevvad.txt touch 'hi my name is nevvad2.txt'