Как объединить блоки текстовых файлов в каталоге в один или несколько файлов?

Если это - действительно все содержание /etc/network/interfaces, необходимо добавить беспроводные интерфейсы там. Вы не заявили, какие методы Вы используете для управления беспроводной связью, но независимо от того, что это, ясно не пишет в /etc/network/interfaces, который необходим, насколько я знаю. Этот файл - то, где все сетевые интерфейсы и конфигурационная информация, включая пароли, определяются. Посмотрите, что любой Debian объединяет учебное руководство в сеть. Сначала смотрите на man interfaces.

Это сетевое учебное руководство выглядит релевантным. Необходимо будет добавить wlan0 к/etc/network/interfaces с соответствующей конфигурацией. Они пропустили ту часть.

2
22.08.2012, 17:41
2 ответа

Вот два решения, то где n файлы добавляются к единственному архиву и тому, где все файлы сначала связаны и затем заархивированы.

Общие шаги к обоим подходам:

# Generate a list of files to be zipped
find . -type f > filelist

# Loop to process n files stepwise
n=50000
fileno=1

for i in $(seq 1 $n $(wc -l < filelist)); do
  # compression code goes here, see below
done

Zip-файлы индивидуально

# automatic name generation
zipfile=$(printf "%04d" $((fileno++)))

# extract lines $i to $i+$n-1 from filelist 
sed -n "$i,$((i+n-1))p" filelist | zip $zipfile -@

Свяжите и архивируйте

Если Вы хотели сделать это с gzip (и другие компрессоры), это было бы довольно просто:

zipfile=$(printf "%04d" $((fileno++)))
sed -n "$i,$((i+n-1))p" filelist | xargs cat | gzip > $zipfile.gz

Как zip не поддерживает этот режим (по крайней мере, не тот, который я имею), Вам нужен другой подход. zip именованные каналы поддержек (-FI) где файл в архиве получает название именованного канала, таким образом делание чего-то вроде этого в цикле должно работать:

zipfile=$(printf "%04d" $((fileno++)))
mkfifo $zipfile
zip -FI $zipfile $zipfile &
sed -n "$i,$((i+n-1))p" filelist | xargs cat > $zipfile
rm $zipfile
1
27.01.2020, 22:07
  • 1
    Спасибо за быстрый response.filename может иметь стандартный префикс, сказать 1ei. Я хочу сначала объединить наборы 50 000 файлов в один текстовый файл и затем архивировать его. –  nka 22.08.2012, 17:59
  • 2
    Спасибо за ответ.. Я сделал некоторые модификации к этому сценарию.. поскольку я в $ (seq 1 2 10); сделайте sed-n "$i, $ ((i+2 - 1)) p" список файлов | xargs кошка>, $i.kkk | архивируют $i.kkk $i.zip; сделанный В этом коде, я могу объединить файлы, но когда я пытаюсь архивировать, он создает проблему.. –  nka 23.08.2012, 09:53
  • 3
    я рекомендовал бы придерживаться с zip fname -@ который добавит имена файлов на stdin к fname.zip. Я добавил некоторое лучшее поколение имени файла zip к ответу. Также посмотрите здесь для подобного вопроса. –  Thor 23.08.2012, 11:22
  • 4
    Спасибо.. Эта программа архивирует 50 000 txt файлов в одной zip... Но я хочу сначала объединить все те 50 000 txt файлов в один txt файл и затем создать zip для того одного txt файла... Действительно ли возможно достигнуть этого в единственной переданной по каналу команде? А-ч –  nka 23.08.2012, 11:53
  • 5
    я думал, именно это Вы хотели сделать, я добавлю обновление с конкатенацией и архивированием. –  Thor 23.08.2012, 13:10

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

Я могу предложить только следующий путь:

cd /to/dir/with/many/files/
mkdir ../tmp
find . | split -l 50000 ../tmp/x
for i in ../tmp/x* ; do 
    while read filename ; do
        cat "$filename" >> "${i}.text" ;
        # rm "$filename" # uncomment it only if you need to delete small files
    done <"$i"
    zip "${i}.zip"  "${i}.text"
    # rm "${i}.text" # uncomment it only if you need to delete result file
done
2
27.01.2020, 22:07

Теги

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