смолите определенное количество файлов, перечисленных в текстовом файле

Если необходимо скомпилировать из источника, как Вы заявили в своем вопросе, Вы не должны выбирать "Generic Linux" из выпадающего меню. Вместо этого выберите "Source Code" и загрузите "Универсальный Linux (Архитектурно-независимый), Сжатый Архив TAR".

Извлеките сжатый файл tar и прочитайте инструкции относительно того, как скомпилировать и установить.

2
05.08.2013, 07:30
4 ответа

Можно попробовать что-то как: (Обновленный для обеспечения пробелов в именах файлов)

head -50 abc.txt | tr "\n" "\0" | xargs -0 tar --null -no-recursion -uf abc.tar --directory=/tmp/temp

Команда head -50 получит Вас первые 50 строк файла списка. Этот результат передается по каналу | кому: tr. В основном, tr выполнит операцию перевода, заменяя символы новой строки \n нулевым символом \0. Результат передается по каналу к xargs -0, который преобразует все эти строки в аргументы tar команда. -0 аргументы в пользу xargs заставляет его разделить аргументы на основе нулевых символов вместо пробелов. Это сделает работы команды, даже если Ваши имена файлов будут иметь пробелы.

Благодаря Jordanm для его комментария.

1
27.01.2020, 22:14

Вдохновленный комментарием jordanm к ответу Bichoy, вот то, как можно иметь дело с именами файлов с пробелами в них:

count=50
i=1
while [ $i -le $count ]
do
    read filename
    tar --null -no-recursion -ruf abc.tar "$filename" --directory=/tmp/temp
    i=$(($i+1))
done <abc.txt

Я использовал a while цикл вместо выполнения for i in {1..50} чтобы позволить Вам мягкому коду количество требуемых строк.

0
27.01.2020, 22:14
  • 1
    В моем сценарии файлы разделяются с помощью ^, и я должен смолить только определенное число файлов. есть ли какая-либо команда для этого в Linux? причина я должен сделать это через java –  Mano 05.08.2013, 13:18
  • 2
    @user1752557 Вы имеете в виду литерал '^' сопровождаемый литералом или управляющий символ '^ '? –  Joseph R. 05.08.2013, 19:42
  • 3
    @user1752557 Что касается выполнения его в Java, разве Вы не можете сделать систему Linux всеми из Java? (Я не то, который испытал с ним так, я не действительно уверен). –  Joseph R. 05.08.2013, 20:46

Можно использовать head или tail управлять количеством файлов, которые Вы ограничиваете из файла abc.txt.

Пример

Образец abc.txt файл.

$ cat abc.txt
afile1
afile10
afile2
afile3
afile4
afile5
afile6
afile7
afile8
afile9

Теперь мы будем смолить только 1-е 3 файла от abc.txt:

$ head -3 abc.txt | tr '\n' '\0' | tar --null --no-recursion -uf abc.tar -T -

Вышеупомянутое берет вывод от head ..., преобразовывает конец символов строки (\n) к нулевым символам (\0). Этот вывод затем передается по каналу к tar, который принимает его через STDIN, (-T -). Этот последний бит говорит tar для взятия STDIN в качестве входа это - список имен файлов к tar.

Подтверждение abc.tar:

$ tar tvf abc.tar 
-rw-rw-r-- saml/saml         0 2013-08-05 13:24 afile1
-rw-rw-r-- saml/saml         0 2013-08-05 13:24 afile10
-rw-rw-r-- saml/saml         0 2013-08-05 13:24 afile2

Можно изменить вышеупомянутое от head -3 ... направляться-100...for example, to get the 1st 100. Or you could useхвост-100...' для получения последних 100 в файле.

1
27.01.2020, 22:14

Если Вы уверены, что нет никаких новых строк в Ваших именах файлов, не преобразовывают пустые байты в новые строки и вызов head сохранить только первые несколько строк.

<abc.txt tr '\0' '\n' |
head -n 50 |
tar --null --no-recursion -uf abc.tar --directory= /tmp/temp --files-from -

Для преодоления имен файлов, содержащих новые строки, Вы можете транспонировать новые строки и аннулируете, затем позвольте head к его материалу, и транспонируют назад.

<abc.txt tr '\0\n' '\n\0' |
head -n 50 |
tr '\0\n' '\n\0' |
tar --null --no-recursion -uf abc.tar --directory= /tmp/temp --files-from -
0
27.01.2020, 22:14

Теги

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