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

Я предлагаю вам использовать индикатор управления частотой процессора для изменения рабочей частоты процессора. Установите powersave или ondemand или какое-то определенное низкое значение.

В окне терминала:

sudo apt-get install indicator-cpufreq

Теперь просто выйдите из системы и войдите в систему.

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

3 ответа

В родительском каталоге с 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) count файлы в под-подкаталоге и присвойте этому номеру j for f in "$d"/*; do для всего содержимого под-подкаталогов [[ -f "$f" ]] &&, если это файл (( (j - ++i) < 100 )) &&, и если количество файлов в каталоге за вычетом количества когда цикл был запущен меньше 100, тогда ... mv -v -- "$f" ../newdirs/"$d" переместите файл в соответствующий каталог в новой структуре.

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

Вы можете настроить ../newdirs на нужный путь.

0
ответ дан 18 July 2018 в 15:32

В родительском каталоге с 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) count файлы в под-подкаталоге и присвойте этому номеру j for f in "$d"/*; do для всего содержимого под-подкаталогов [[ -f "$f" ]] &&, если это файл (( (j - ++i) < 100 )) &&, и если количество файлов в каталоге за вычетом количества когда цикл был запущен меньше 100, тогда ... mv -v -- "$f" ../newdirs/"$d" переместите файл в соответствующий каталог в новой структуре.

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

Вы можете настроить ../newdirs на нужный путь.

0
ответ дан 24 July 2018 в 20:40

В родительском каталоге с 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) count файлы в под-подкаталоге и присвойте этому номеру j for f in "$d"/*; do для всего содержимого под-подкаталогов [[ -f "$f" ]] &&, если это файл (( (j - ++i) < 100 )) &&, и если количество файлов в каталоге за вычетом количества когда цикл был запущен меньше 100, тогда ... mv -v -- "$f" ../newdirs/"$d" переместите файл в соответствующий каталог в новой структуре.

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

Вы можете настроить ../newdirs на нужный путь.

0
ответ дан 31 July 2018 в 23:41

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

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