Я успешно установил оба способа, и это не представляет проблемы, поскольку я не использую двойную загрузку; я использую другие альтернативы для запуска win на машине.
Я заметил, что размер раздела подкачки UEFI значительно меньше, чем при традиционной установке... Не знаю, почему так...
Просто:
#!/bin/bash
files_count=`ls -1./ | wc -l`
block_size=10
blocks_count=$(($files_count/$block_size))
for i in $(seq 1 1 $blocks_count); do
files=`find. -type f -exec readlink -f {} \; | head -$block_size`
for j in $files; do
if [ -f $j ] && [[ "$j" != outfile* ]] ; then
cat $j >> outfile$i
fi
done
done
# remainder part
for i in *; do
if [ -f $i ] && [[ "$i" != outfile* ]] ; then
cat $i >> outfilelast
fi
done
Примечание:
Your files merged alphabetically and also script should be placed inside the same directory.
Я попытался использовать метод ниже
for ((i=1;i<=1200;i++)); do j=$(($i + 249 )); sed -n ''$i','$j'p' filename >individual_$i ;i=$j; done
Предполагая, что вы можете объединить их в порядке, find
находит их:
find. -maxdepth 1 -type f -print0 |
xargs -0 -L 250 sh -c 'cat "$@" >/tmp/combined-${1##*/}' sh
Для каталога, содержащего файлы с именами от file-1
до file-739
(, например ), это создаст файлы в /tmp
с именем combined-file-1
, combined-file-251
и combined-file-501
, где бит после combined-
— это имя первого файла в этом объединенном файле.
Он делает это, вызывая cat
для объединения файлов в пакетах максимум по 250 файлов за раз в -строковом сценарии оболочки, многократно выполняемомxargs
(${1##*/}
в этом сценарии, удаляющем любой каталог. путь от пути к первому файлу текущего пакета ). Утилита xargs
получает имена файлов в виде строк с нулевым завершением -из find
. Утилита find
будет искать в текущем каталоге (только )и выводить в нем все пути, соответствующие обычным файлам.
Затем вы должны распечатать файлы /tmp/combined-*
.
Чтобы обрабатывать только файлы с определенным суффиксом, например .txt
, используйте -name '*.txt'
в команде find
перед -print0
.
Действие -print0
в find
и опция -0
в xargs
не являются стандартными -из-за общепринятой реализации.
Для этого можно написать простой цикл с массивом и${x:s:l}
раскрытием параметров:
files=(*)
for (( i = 0; i < ${#files[@]}; i += 250 ))
do
cat -- "${files[@]:$i:250}" > "file$i.combined"
done
Здесь мы собираем все (не -скрытые )файлы в .
в массивfiles
(имен файлов, отсортированных лексически ), и циклически пересчитываем от 0 до любого количества файлов. в 250с. Для каждого 250 мы расширяем имена файлов (0 -249, 250 -499 и т. д. )в качестве аргументов для cat
и помещаем вывод в file0.combined
, file250.combined
и т. д..
Это всего лишь версия Bash традиционного цикла -в стиле C for
. Поскольку вам все равно придется зацикливаться на каждом отдельном cat
, нет особого смысла все усложнять.
Вы получите несколько .combined
файлов в конце -, так как имена файлов уже были расширены, они не будут снова включены в конкатенации,но если вы запустите команду во второй раз, они будут. Если это вас беспокоит, вы можете поместить их в другое место, а затем удалить, или, если они идут прямо на принтер, даже просто направить на lp
.