не удается удалить файл с возвратом каретки

Хронологическим порядком:

tr/sed

echo "$VERSION" | tr -d .
echo "$VERSION" | sed 's/\.//g'

csh/tcsh

echo $VERSION:as/.//

Оболочки POSIX:

set -f
IFS=.
set -- $VERSION
IFS=
echo "$*"

ksh/zsh/bash/yash (и busybox ash при создании с ASH_BASH_COMPAT)

echo "${VERSION//.}"

zsh

echo $VERSION:gs/./
2
31.10.2015, 02:06
5 ответов

Вы можете заключить строку в $ '' , чтобы разрешить интерпретацию в ней управляющих последовательностей (в данном случае, чтобы разрешить интерпретацию of \ r ):

rm $'file\rwith_carriage_return'
% touch $'file\rwith_carriage_return'
% ls
file?with_carriage_return
% rm $'file\rwith_carriage_return'
% ls
% 
3
27.01.2020, 21:54

Обычно, когда я попадаю в такие ситуации, я делаю следующее ..

Пример: Предположим, у меня есть файл 'xxx \ nyyy'

Я знаю, что он начинается с 'xxx' .....

Я использую команду:

 rm -i xxx*

И удаляю ПРАВЫЙ файл при появлении запроса, хотите ли вы удалить файл или нет.

1
27.01.2020, 21:54

Из нескольких доступных методов один состоит в том, чтобы найти номер inode и затем выкинуть его.

$ mkdir -p ~/tmp/asdf
$ cd !$
cd ~/tmp/asdf
$ touch `head -c 32 /dev/random` # newlines are boring
$ find . -type f -ls
5636303    0 -rw-r--r--   ...
$ find . -maxdepth 1 -inum 5636303 -exec rm '{}' \;
1
27.01.2020, 21:54

Я удалил с помощью rm *.*, однако я все еще хотел бы знать, почему rm blahblah\r\n.txt и rm blahblah*.txt не работают...

0
27.01.2020, 21:54

Должно быть возможно удалить файл, если вы выделите имя файла: rm 'bla\n.txt'

Но если это не сработает, попробуйте удалить по номеру inode:

ls -i bla*
1234 bla\n.txt
find . -inum 1234
#make sure the right file and only the right file is returned then
find . -inum 1234 -delete
1
27.01.2020, 21:54

Теги

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