bash:спецсимволы_в_именах

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

Есть два способа создать имя файла содержащие -

touch -- -abc.txt
 
# or		
touch ./-abc.txt

Чтобы переименовать такой файл используем такую конструкцию

mv -- -abc.txt -a.txt

А для удаления, такую:

rm -- -abc.txt
 
# or
rm ./-abc.txt 

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

rm ./-*

Одна важная вещь, на которую стоит обратить внимание в примере выше, под действие команды удаления попадут все файлы содержащие тире. Не только в начале, а в любой части мени. А именно, -abc.txt, ab-c.txt, abc-.txt и т. д.

Известно, что символ #, интерпретируется в dash как комментарий. А следовательно игнорируется. При попытке создать такой файл, получим:

touch #hash-name.file
 
touch: missing file operand
Try 'touch --help' for more information.

Bash интерпретирует комментарий #abc.txt и, следовательно, игнорирует его. Таким образом, команда touch была передана без какого-либо файлового операнда, и следовательно, ошибка.

Для устранить такую ​​ошибку, вы можете попросить BASH не интерпретировать # как комментарий:

touch ./#abc.txt
# or
touch '#abc.txt'

Если попробовать создать сразу несколько файлов:

touch a.txt #bc.txt

То будет создан только один – a.txt, #bc.txt был проигнорирован, но при этом, без сообщения об ошибке. Для группового создания файлов с такими именами, действуем таким образом:

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, точка с запятой, действует как разделитель, позволяя выполнять несколько команд за один раз. Если попробуем создайте имя файла начинающиеся с ;, получим вот такое сообщение:

touch ;abc.txt
 
touch: missing file operand
Try 'touch --help' for more information.
abc.txt: command not found

Причина вышеуказанной ошибки заключается в том, что bash интерпретирует touch как команду, но не может найти ни одного файлового операнда перед точкой с запятой и следовательно, сообщает об ошибке. bash также сообщает о другой ошибке, что команда abc.txt не найдена, только потому, что после точки с запятой bash ожидал другую команду, а abc.txt которая не является командой.

Чтобы устранить эту ​​ошибку, укажем bash, не интерпретировать точку с запятой как разделитель команд:

touch ./';abc.txt'
# or
touch ';abc.txt'

Имя файла заключенное в одинарные кавычки '', сообщает bash, что ; это часть имени файла, а не разделитель команд.

Не требует никаких дополнительных телодвижений.

touch +2308.txt 

Следует заключить имя файла в одинарные кавычки, как это ранее делали в случае с точкой с запятой:

touch '$2308.txt'

Наличие asterisk-а в имени файла ничего не меняет, работаем как с обычным файлом:

touch *2308.txt

Но, есть нюансы. Когда будет нужно удалить файл, который начинается с *, никогда не используем следующею команду:

rm *
# or
rm -rf *

Удаляем таким образом:

rm ./*.txt

Ничего дополнительного делать не нужно:

touch %2308.txt

заключаем имя файла в одинарные кавычки:

touch '!2308.txt'

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 указывает оболочке игнорировать следующий символ. В одинарные кавычке

touch '\abc.txt'
touch ?2308.txt

в Linux, файлы, начинающиеся с точки ., являются особенными и называются dot-файлами. Это скрытые файлы, как правило, конфигурационные или системные файлы. Для просмотра таких файлов необходимо использовать флаг -a или -A в команде 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'
  • bash/спецсимволы_в_именах.txt
  • Последнее изменение: 2022/04/27 13:36
  • admin