Рейтинг:0

Линукс | Скопируйте только первые 100 новых файлов в каталоге и вложенных каталогах

флаг us

У меня есть хранилище, как показано ниже на AzureVM/Ubuntu.

-/А
   -/B --> 10000 лог-файлов
   -/C --> 100000 лог-файлов 
      --/D --> 200000 изображений 
   резюме.xml
   --/данные --> 1000 CSV-файлов

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

Я хочу скопировать подмножество в другое место, в котором есть 100 новейших файлов в каждом каталоге и вложенном каталоге, а также все файлы в корне, что-то вроде этого.

-/Новое место
   -/B --> 100 лог-файлов
   -/C --> 100 лог-файлов 
       -/D --> 100 изображений 
   резюме.xml
   --/данные --> 100 CSV-файлов

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

Может кто-нибудь, пожалуйста, помогите мне здесь?

David avatar
флаг cn
Какие команды? Давайте посмотрим, что именно вы пробовали. Как кто-то может помочь вам, если вы не даете информацию.
Bamboocoder avatar
флаг us
одна из вещей, которые я пробовал, переходя к каждой папке, а затем запуская эту команду cp -R -- *([1,100]) ../New, но она не копирует данные всех вложенных папок, а также слишком много ручной работы, поскольку у меня есть тысячи папок внутри одной
David avatar
флаг cn
Дополнительная информация в вопросе, пожалуйста, не в качестве комментария. Вы сказали одну из вещей, что было остальным?
Рейтинг:0
флаг cn

Обычно вы можете разделить это на три задачи, где вы начинаете со структуры каталогов, а затем, как в вашем случае, ограничиваете файлы до 100. Последняя часть инвертирует соответствовать чтобы охватить остальные файлы.

#!/бин/баш  
  
# Пример СТАРТ  
[[ ! -d A/ ]] && { \  
мкдир -p \  
A/{tmp/папка,\  
{A..Z}}/{изображения,данные} && \  
printf %s\0 \  
А/{сводка.xml,\  
tmp/De5Loh4X.tmp,\  
{A..Z}/{{1..1000}_file.log,\  
изображения/{1..1000}_pic.{jpg,png},\  
данные/пример.csv}} | xargs -0 касание; }  
### Пример КОНЕЦ  
  
установить -o неглоб  
  
источник=А  
цель = цель  
число=100  
# обрезать="-false"  
prune="-тип d -путь $source/tmp -prune"  
match='-name *.log -o -name *.jpg -o -name *.png'  
  
echo Создать структуру каталогов.  
найти "$ источник" \  
\($prune -o -type d -links 2 \) -printf %P\0 | cpio -0 -pvdm -D "$ источник" "$ цель"  
  
  
эхо Скопируйте 100 файлов.  
в то время как IFS= читать -rd ''; делать  
найти "$ ОТВЕТ" \  
-maxdepth 1 -type f \( $match \) -printf '%T@\t%P\0' | сортировать -zk1rn | вырезать -zf2- | голова -zn $число | cpio -0 -pvdm -D "$REPLY" "$target/${REPLY/#$source\//}"  
сделано < <( \  
найти "$ источник" \  
\($prune -false -o -type f \) -printf %h\0 | сортировать -zu \  
)  
  
echo Скопируйте все остальное.  
найти "$ источник" \  
\( $prune -false -o -type f ! \( $match \) \) -printf %P\0 | cpio -0 -pvdm -D "$ источник" "$ цель"
bac0n avatar
флаг cn
`-name *` ограничит все типы файлов до 100.
Рейтинг:0
флаг cn

Это легко сделать с помощью выборочного архивирования. Вы можете заархивировать файлы (только нужные), а затем извлечь архив куда-нибудь еще. Я предполагаю, что ваши файлы журналов имеют одно и то же имя, за исключением нумерации (например, log1, log2 и т. д.). Таким образом, первая сотня файлов может быть определена в команде tarball как log{1..100}. Например:

tar -cvf скопировано.tar <путь1>/log{1..100} <путь2>/log({1..100} и т.д

При извлечении исходная файловая структура будет воссоздана в новом месте. Таким образом, вам может понадобиться использовать опцию "--strip-components=", чтобы обрезать избыточные ведущие каталоги, чтобы избежать беспорядка.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.