copy- объединить содержимое нескольких папок, отдавая приоритет более новым файлам

El P2P Messenger Briar-que no he probado yo mismo -funciona enviando mensajes a través de Bluetooth, Wifi o la red TOR sin ninguna nube.

0
19.06.2019, 23:05
1 ответ

Вот простой вариант, если вас не волнует перебор -принудительного копирования каждого файла. Он перебирает каталоги (, предполагая четыре -цифры года, как в вашем примере ), естественно сортируя их в числовом порядке и копируя их содержимое в текущий каталог:

for date in [[:digit:]][[:digit:]][[:digit:]][[:digit:]]/; do cp -r "$date"/*.; done

Разбит на несколько строк:

for date in [[:digit:]][[:digit:]][[:digit:]][[:digit:]]/
do 
  cp -r "$date"/*.
done

Если у вас есть точечные файлы в верхних -каталогах уровня (непосредственно под годами ), то вам следует shopt -s dotglobзаранее.

Это копирует каждый файл, позволяя «более новым» (файлам более поздних лет )стирать старые файлы.


Если ваши имена каталогов отличаются, вам нужен другой шаблон подстановки/подстановки. В случае числовых префиксов, которые не заполнены нулем -, я бы предложил:

for directory in ?-* ??-* ???-*... etc...

столько, сколько вам нужно для захвата старшего числового префикса. Сортировка производится в двух местах:

  1. местоположение -на основе :однозначные -имена каталогов перечислены первыми в цикле for, двухзначные -имена — вторыми и т. д.
  2. внутри каждого шаблона подстановочных знаков имена каталогов сортируются лексически, поэтому 10-etcбудет стоять перед 11-etcи так далее.
2
28.01.2020, 02:40

Теги

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