2015-08-16 1 views
3

У меня есть папка, содержащая 2Gb изображений, с подпапками на несколько уровней.Unix: как tar только N первых файлов каждой папки?

Я хотел бы архивировать только N файлы каждой (вспомогательной) папки в файле tar. Я попытался использовать find, затем tail, затем tar, но не смог заставить его работать. Вот что я пытался (при условии N = 10):

find . | tail -n 10 | tar -czvf backup.tar.gz 

& hellip; который выводит эту ошибку:

Cannot stat: File name too long 

Что здесь не так? думая об этом - даже если он работает, я думаю, что он будет делить только первые 10 файлов всех папок, а не первые 10 файлов каждой папки.

Как я могу получить первые файлы N каждой папки?

+4

Возможно, вы захотите перенести этот вопрос на http://unix.stackexchange.com/ – mark

+0

Что вы пытаетесь достичь –

+0

Тар не любит комбинации длинного пути/имени файла. –

ответ

1

Предложение с некоторыми причудами: заказ определяется только порядком из find, поэтому «первый» не является четким.

 
find . -type f | 
awk -v N=10 -F/'match($0, /.*\//, m) && a[m[0]]++ < N' | 
xargs -r -d '\n' tar -rvf /tmp/backup.tar 

gzip /tmp/backup.tar 

Комментарии:

  1. использовать find . -type f, чтобы убедиться, что файлы имеют ведущее префикс-имя каталога, так что следующий шаг может работать
  2. в awk команды дорожек таких ведущих имен каталогов, и выдают полным имена путей до тех пор, пока не будут выброшены файлы N (10, здесь) с одним и тем же ведущим каталогом
  3. xargs для вызова tar - мы собираем обычные имена файлов, и они n ПЕД быть аргументы этой команды архивирования
  4. xargs может ссылаться на более tar чем один раз, так что мы будем добавлять (опция -r) в простой архив, а затем сжать его после того, как все написано

Кроме того, вам может не захотеть записать файл резервной копии в текущий каталог, так как вы его сканируете - вот почему это предложение записывается в/tmp.

+0

У меня есть сообщение об ошибке: awk: строка 1: ошибка синтаксиса около или около, – Sam

+0

Какая версия awk? MIne - это GNU Awk 4.1.0, и его функции могут иметь значение. – sjnarv

Смежные вопросы