Как мы можем переименовать файл с точкой с запятой как часть имени файла?

На основе моего опыта,"-bash: echo: write error: No such device"обычно средство там не является никакой поддержкой ядра данного устройства. Таким образом, необходимо попытаться реконфигурировать и восстановить ядро. Если можно найти какое-либо другое рабочее ядро (например, от SLES), его конфигурация будет лучшей начальной точкой.

1
03.03.2012, 00:41
3 ответа

Проблемой не является точка с запятой, Ваш второй пример заботился бы об этом. Проблема состоит в том, что утилиты Linux/Unix (и, следовательно, Cygwin) не берут ту инструкцию означать, "перемещают все файлы, заканчивающиеся в .XLS;1 кому: .XLS," поскольку я понимаю, что Windows делает. Необходимо переместить каждый файл индивидуально:

for file in *.XLS\;1; do 
    mv "$file" "${file%;1}"
done

Объяснение:

Это принимает все окончание файлов .XLS;1 и хранит их по одному в названную переменную $file. Для каждого файла мы говорим этому перемещать это $file к новому имени мы создаем путем прерывания ;1 от задней части $file.

N.b. Для тех, которые используют zsh, существует хорошая названная утилита zmv:

zmv '(*).XLS;1" "$1.XLS"

В зависимости от Вашей установки Вы, возможно, должны работать autoload zmv сначала (помещает его в Ваш .zshrc также).

5
27.01.2020, 23:13

Можно переместиться inode.

Найти inode

ls -i 

с помощью inode Вы просто нашли

find . -inum <you just found> -exec mv {} <new name> \;

Это должно работать над системой Unix. Никакая идея о cygwin.

1
27.01.2020, 23:13
  • 1
    , но я должен переименовать много файлов. –  lamwaiman1988 02.03.2012, 06:17
  • 2
    Верный, но не полезный здесь. –  Gilles 'SO- stop being evil' 03.03.2012, 00:41

Cygwin имеет пакет util-linux, который содержит rename:

rename ".XLS;1" ".XLS" *.XLS\;1

Или при отсутствии других точек с запятой в именах файлов, это достаточно:

rename ";1" "" *.XLS\;1
1
27.01.2020, 23:13

Теги

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