Извлечь последние 100 файлов во все подкаталоги, в каждом каталоге есть переменное количество файлов [дубликат]

У меня есть каталог с 6 подкаталогами. В каждом подкаталоге также есть переменное количество подкаталогов. Эти последние каталоги имеют переменные номера файлов *. Jpg . Файлы jpg именуются в виде 0000.jpg , 0001.jpg и так далее.

Мне интересно получить последние 100 * .jpg файлов (все каталоги содержат> 100 файлов) и сохранить их в отдельных каталогах с такой же структурой, как и исходные каталоги.

Как лучше всего это сделать?

1
задан 4 April 2017 в 20:45

1 ответ

В родителе с этими 6 подкаталогами:

mkdir ../newdirs

Затем:

for d in */*; do mkdir -p ../newdirs/"$d"; i=0; j=$(stat "$d"/* --printf "%i\n" | wc -l); for f in "$d"/*; do [[ -f "$f" ]] && (( (j - ++i) < 100 )) && echo mv -v -- "$f" ../newdirs/"$d"; done; done

Удалить echo после тестирования для фактического перемещения файлов.
Больше четко:

for d in */*; do 
  mkdir -p ../newdirs/"$d" 
  i=0
  j=$(stat "$d"/* --printf "%i\n" | wc -l)
  for f in "$d"/*; do 
    [[ -f "$f" ]] && 
    (( (j - ++i) < 100 )) && 
      echo mv -v -- "$f" ../newdirs/"$d"
  done
done

Примечания

  • mkdir ../newdirs сделайте новый каталог для перемещенных файлов на том же уровне как текущий (т.е. в родителе .. из обоих)
  • for d in */*; do для каждого подподкаталога...
  • mkdir -p ../newdirs/"$d" сделайте каталог в параллельной структуре, с помощью -p создать родительские каталоги по мере необходимости и
  • i=0 установите переменную на 0 для подсчета повторений
  • j=$(stat "$d"/* --printf "%i\n" | wc -l) считайте файлы в подподкаталоге и присвойте этот номер j
  • for f in "$d"/*; do для всего содержания подподкаталогов
  • [[ -f "$f" ]] && если это - файл
  • (( (j - ++i) < 100 )) && и если количество файлов в каталоге минус количество раз, цикл был выполнен, является меньше чем 100, то...
  • mv -v -- "$f" ../newdirs/"$d" переместите файл в соответствующий каталог в новой структуре.

for выполняет итерации по файлам заказанным способом, таким образом, этот метод даст последние 100 файлов, как перечислено численно.

Можно корректироваться ../newdirs к пути Вы хотите.

0
ответ дан 8 December 2019 в 05:54

Другие вопросы по тегам:

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