Файлы копии согласно порядку даты/времени содержатся в имени файла?

[1122816] Это может не дать прямого ответа на вопрос, но Вы также можете использовать [1123296]vi[1123297] в шестнадцатиричном режиме:

Откройте Ваш файл и введите его тип: [1123298]ESC

:%!xxd[1123301] для переключения в шестнадцатеричный режим.

  1. Вы сможете редактировать шестнадцатеричную часть (текстовая часть не будет обновляться по мере изменения шестнадцатеричной части).

  2. После завершения нажмите клавишу escape еще раз и введите текст: [1123302]ESC

  3. :%!xxd -r[1123305], чтобы записать обратно изменения, которые вы сделали в шестнадцатиричном режиме (не забудьте сохранить позже).[1122823].

2
19.09.2014, 00:06
3 ответа

Если все совпадающие файлы находятся в текущем каталоге (а не в каком-либо подкаталоге или если имена подкаталогов не содержат - ), вы можете использовать для шагов 1-3:

find -regex '.*/[0-9]+-[0-9]+-[0-9]+-NEW\.XML' | sort --field-separator=- --key=2 > filelist

и для шаг 4:

while IFS= read -r line; do
 cp -v $line /PATH/TO/DESTFOLDER/
done < filelist

Объяснение: Шаблон регулярного выражения find соответствует всем файлам с описанным шаблоном. sort разделяет поля на - и сортирует сначала по второму полю (дате), затем по следующим полям, здесь третье поле (время). Способ обработки линий в оболочке описан здесь . Каждая строка сохраняется в переменной $ line и копируется в папку назначения. Параметр -v в cp показывает, какой файл копируется в данный момент.

1
27.01.2020, 22:13

Из вашего случая я понял, что вам нужно скопировать файлы с этим шаблоном в соответствующую папку на основе отметки времени в имени файла.

для этого вы можете просто выполнить итерацию по ним и переместить каждый файл в соответствующий каталог:

for i in [[:digit:]]*-NEW.XML; do  dirname="${i%6:6}"; mv $i $dirname; done;

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

0
27.01.2020, 22:13

Zsh имеет глобусный классификатор для изменения сортировки глобусов. Скажите ему, чтобы он сортировал по имени файла с удаленным префиксом UID-.

cp <->-<->-<->-NEW.XML(oe\''REPLY=${REPLY#*-}'\') /somewhere/else/

(Настройте шаблон, если хотите точно указать количество цифр - <-> совпадает с любой последовательностью цифр)

Обратите внимание, что порядок, в котором копируются файлы, может наблюдаться или не наблюдаться. Большинство файловых систем обеспечивают как минимум вторую гранулярность для временных меток, но копирование каждого файла, вероятно, занимает намного меньше времени. В каталоге нет внутреннего порядка файлов; первый копируемый файл не обязательно является первым файлом, перечисленным в ls -f (в зависимости от файловой системы это может происходить часто или почти никогда).

1
27.01.2020, 22:13

Теги

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