Вы можете попробовать использовать rsync для синхронизации с вашим устройством, хотя при передаче MTP вы обычно не можете устанавливать отметку времени и даты для каждого файла. Чтобы ускорить передачу, вы должны использовать опцию --size -only для rsync, а не опцию -t. Я считаю, что проще всего сменить каталог на каталог mtp, например, /run/user/1000/gvfs/mtp :host=blahblah/blah/blah, затем запустить:
rsync -n -vlr --size-only --delete /source/of/files/./
Опция -n предназначена для пробного прогона. Просто сотрите эту опцию, если вы удовлетворены результатами.
Вы переусердствуете, воспользуйтесь преимуществами своей файловой структуры, чтобы упростить ее!
Если мы находим строку [United
в строке, перевод в верхний регистр всего от закрывающей скобки до конца строки дает нужный результат. Переводя это на язык сед,
sed '/\[United/s/].*/\U&/' file
Обратите внимание, что приведенное выше относится только к GNU Sed. Если это недоступно, но в системе POSIX, вы можете использовать Ex(или посмотреть Awk-версию αғsнιη)с аналогичным синтаксисом:
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
Чтобы сохранить изменения в файле вместо печати результатов, измените %p
на x
.
Использованиеawk
:
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
в [...]
мы определили ]
и [
как разделитель полей, затем проверяем второе поле, если оно начинается с текста United
, если да, то добавляем обратно []
вокруг второго поля (I предположим, что нет другого столбца, склоняющего эти символы, иначе эти поля пропустят это ); затем мы преобразуем третий столбец в его значение в верхнем регистре; идиома 1
триггер awk
печать по умолчанию (вид всегда истинного условия ).
С помощью awk
мы можем сделать это, сначала определив позицию закрывающей квадратной скобки в текущей записи, когда эта запись объединена во 2-м поле.
$ awk '
$2 == "[United" {
p = match($0, /]/)
$0 = substr($0, 1, p-1) \
toupper(substr($0, p))
}1
' f1.txt
Poixly sed может сделать это по тому же принципу, что и решение awk. Нам нужно получить позицию] и пометить ее так, чтобы пространство шаблона было разделено на две половины. У правой половины есть имя, и на нем мы прописываем его с помощью команды y///.
$ sed -e "
/\[United[[:blank:]]/!b
y/]/\n/
h;s/.*\n//
y/$(printf %s {a..z})/$(printf %s {A..Z})/
x;s/\n.*//
G
y/\n/]/
" f1.txt
$ perl -pe 's/\[United\s+.*?]\K(.*)/\U$1/' f1.txt