Я хочу скопировать целое содержание файла в другого несколько файлов как мудрая группа. Предположим, Выбираю ли я 10 .txt файлов затем, содержание тех файлов должно быть копией и вставкой в другом новый файл. Эти все файлы находятся в том же каталоге.
Я хочу сделать это в несколько файлов (<2000). Так не может сделать этого вручную.
Для Вашего вопроса нужна ясность. Существует два возможных случая, что я вижу случай:
Копирование многих одному:
for file in directory/*.txt; do cat "$file" >> someotherdir/combined.txt; done
Копирование многих многим:
for file in directory/*.txt; do cp "$file" someotherdir/"$( basename "$file" )".copy ; done
В каждом примере мы смотрим на названный каталог directory
в Вашем текущем местоположении (проверяют это с pwd
команда). Таким образом, если я нахожусь в /home/foo_user
мы смотрим на /home/foo_user/directory
. Шарик *.txt
будет соответствовать всем файлам .txt
окончание. Целевой каталог someotherdir
также будет ссылаться относительно Вашего текущего местоположения. Обеспечьте полный путь такой как /home/foo_user/someotherdir/anotherdir
если Вы хотите скопировать в определенное местоположение. В первом примере мы используем cat
и >>
добавлять содержание всех файлов в единственный файл. В другом cp
делает копию каждого файла к новому имени файла, которое будет вынимать название файла в настоящее время в "$file"
переменная и добавляет .copy
к нему.
Обратите внимание, что, если именование не важно, мы можем уменьшить второй случай до просто создания нового каталога и копирования его рекурсивно через cp -r
:
mkdir copies
cp -r original_dir/ copies/
Так может быть сделан с первым случаем как cat dir/*.txt > combined.txt
однако циклы предпочтительны, когда Вы имеете дело с большим количеством файлов и можете столкнуться Argument list too long
ошибка, от которой не страдают циклы оболочки.
Не зная определенные детали, эти два решения должны быть достаточными для нескольких случаев. Адаптируйтесь соответственно к своему конкретному сценарию.
Для копирования всего содержания от file1.txt до file2.txt используют следующий код:
cp file1.txt file2.txt
Если Вы знаете все названия входных и выходных файлов, Вы могли бы использовать цикл:
#!/bin/bash
input=(input1.txt input2.txt inputn.txt)
output=(output1.txt output2.txt outputn.txt)
i=0
while (i<="${input#[@]}")
do
cp "${input[i]}" "${output[i]}"
i++
done
Большая часть из этого, однако, зависела бы от определенной ситуации.