Получить список папок после определенного номера

El más corto con GNUdatamash:

datamash -sW -g1 max 2 <file
  • -s-ordenar la entrada antes de agrupar
  • -W-use espacios en blanco (uno o más espacios y/o tabuladores )para delimitadores de campo
  • -g 1-grupo a través del primer campo
  • max 2-operación numérica para obtener el valor máximo del 2do campo por grupo

La salida:

host1   222
host2   90
host3   8
2
28.03.2019, 18:30
6 ответов

я только что перечислил, что вы замените команду ls согласно вашему требованию

ls -ltr | awk '$1 ~ /^d/{print $0}'|sed -n '/[0-9]\{6\}/p'| awk '$NF >= "201412" {print "ls -ltr "$NF}'| sh
0
28.07.2021, 12:17

Текущее требование состоит в том, чтобы перечислить имена подкаталогов, которые являются после 201412, т. е. 201501или более поздней версии.

Эти каталоги будут соответствовать шаблону 201[5-9]*.
Чтобы также обрабатывать имена после 2019 (до 2099 ), используйте 201[5-9]* 20[2-9]*.

Перечислить их:

shopt -s nullglob # to allow non-matching globs to expand to nothing
printf '%s\n' somedir/201[5-9]*/ somedir/20[2-9]*/

где somedir— это каталог, в котором хранятся ваши подкаталоги.

Что-то сделать с каждым из них:

shopt -s nullglob
for dir in somedir/201[5-9]*/ somedir/20[2-9]*/; do
   aws s3 cp "$dir"...
done

Примечание. :Я никогда не использовал S3, поэтому не знаю, какую команду использовать для загрузки каталога файлов.

1
28.07.2021, 12:17

Я бы использовал вариацию теперь -удаленного ответа для создания массива нужных файлов в bash:

$ mkdir 201412 201501 201705 202003

$ files=()
$ for d in */
do
  (( d > 201412)) && files+=("$d")
done
$ declare -p files
declare -a files='([0]="201501" [1]="201705" [2]="202003")'

Затем вы можете безопасно перебрать этот массив (или развернуть его целиком )для загрузки, например:

$ aws upload command "${files[@]}"
0
28.07.2021, 12:17

вывести содержимое каталога, передать вывод в awk, распечатать только те значения, значения которых больше или равны нужной дате, передать в xargs s3.

ls | awk '$1 >= 201412 {print $1}' | xargs -n1 YOUR_S3_COPY_COMMAND -options

Если каталогов и файлов много, можно распараллелить xargs с -P числом параллельных процессов.

ls | awk '$1 >= 201412 {print $1}' | xargs -n1 -P20 YOUR_S3_COPY_COMMAND -options

1
28.07.2021, 12:17

Я не уверен, что вы можете сделать это напрямую, поэтому вам нужно получить список каталогов, а затем отфильтровать вывод. Такая команда может помочь:

ls|awk -v snumber=201412 '$1>snumber {print}'
0
28.07.2021, 12:17

Попробуйте это,

 find. -type d  -regex '^./[0-9]+' -exec sh -c 'test "{}" ">" "./201412"' \; -print

Как я спросил в комментариях. В текущем каталоге могут быть файлы с числовыми именами -и без них

.
  • type -dбудут перечислены только каталоги
  • -regex '^./[0-9]+'будут перечислены только имена с цифрами
  • testиспользуется для сравнения результата

Здесь вы можете добавить maxdepth, чтобы ограничить поиск текущим каталогом, но наш regexсам сделает то же самое.

0
28.07.2021, 12:17

Теги

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