Как я могу переместить содержание txt файла к другому Сценарию Bash использования?

Я хочу скопировать целое содержание файла в другого несколько файлов как мудрая группа. Предположим, Выбираю ли я 10 .txt файлов затем, содержание тех файлов должно быть копией и вставкой в другом новый файл. Эти все файлы находятся в том же каталоге.

Я хочу сделать это в несколько файлов (<2000). Так не может сделать этого вручную.

1
задан 11 December 2018 в 08:00

2 ответа

Для Вашего вопроса нужна ясность. Существует два возможных случая, что я вижу случай:

  1. Копирование многих одному:

    for file in directory/*.txt; do cat "$file" >> someotherdir/combined.txt; done
    
  2. Копирование многих многим:

    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 ошибка, от которой не страдают циклы оболочки.

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

3
ответ дан 3 December 2019 в 06:50

Для копирования всего содержания от 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

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

1
ответ дан 3 December 2019 в 06:50

Другие вопросы по тегам:

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