Как я могу вставить символы во многие имена файлов, которые содержат пробелы и/или знаки препинания в определенной позиции в терминале или с помощью скрипта

просто поместите следующее в начало ~/.bashrc для имени пользователя id на удаленной машине, если этот id использует bash

# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return  

, который просто рано выходит из ~/.bashrc вместо поиска всего файла... это решает проблему молчания.bashrc, когда вы не входите в систему с этим идентификатором, а просто запускаете свой scp или sftp с этим именем пользователя в качестве удаленный идентификатор... процитировать @Peter Scott в другом ответе :«Проще говоря, профиль.bashrc и.bash _и т. д. должны быть тихими, иначе они будут мешать протоколу соединения sftp / scp».

В качестве альтернативы, если этот удаленный идентификатор использует zsh, поместите следующее в начало его ~/.zshrc

# If not running interactively, don't do anything and return early
[[ -o interactive ]] || exit 0

Если оболочка на вашем удаленном компьютере не использует ~/.bashrc, внесите указанные выше изменения в файл ~/.bashrc _profile или ~/.profile или аналогичный, чтобы он соответствовал вашей оболочке на этом выносной ящик

0
10.04.2021, 23:59
2 ответа

С помощью инструмента переименования Perl

для вставки- (тире и пробела )после первых 30 символов (или байтов, я не знаю, включает ли это локали):

rename 'substr($_, 30, 0) = "- "' *.mp3

добавить - после первого вхождения двух цифр и пробела:

rename 's/(\d\d )/$1- /' *.mp3

Обратите внимание, что есть две разные команды rename, одна из util-linuxи одна из Perl. Они делают разные вещи, см.:

2
28.04.2021, 22:53

Обработка имен файлов с пробелами требует findи xargs. Прочтите man find xargsи

.
find. -type f -print0 | xargs -0 --no-run-if-empty someprogram...

-print0указывает findсоздать список имен файлов, разделенных ASCII NUL (0x00 )байт. NUL (и "/" )никогда не встречаются в именах файлов.

xargs -0сообщает xargsиспользовать такой разделенный нуль -список и передавать столько имен файлов, сколько система позволит someprogram, и будет вызывать someprogramснова и снова, пока не закончатся имена файлов..

xargs --show-limits </dev/nullпокажет эти пределы.

0
28.04.2021, 22:53

Теги

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