Как отправить файл как вход в другой файл?

Через командный процессор мы можем перенаправить три стандарта filestreams так, чтобы мы могли быть введены или из файла или из другой команды вместо с нашей клавиатуры, и мы можем записать вывод и ошибки в файлы или отправить их, как введено за последующими командами.

Итак, почему мы не можем дать вход другому файлу как

~# /root/Documents/text1.txt > /root/Documents/text2.txt
7
задан 20 October 2014 в 04:45

5 ответов

Можно перенаправить содержание text1.txt с помощью эти cat команда:

~# cat /root/Documents/text1.txt > /root/Documents/text2.txt

Примечание : можно использовать cat, чтобы также создать новые двоичные файлы, например:

~# cat mypic.jpg > my_new_pic.jpg
8
ответ дан 23 November 2019 в 06:09

Чтобы подробно остановиться ответ @SylvainPineau , причина, Вы не можете сделать /root/Documents/text1.txt > /root/Documents/text2.txt, то, что вещь отделяется от оператора перенаправления и файла после того, как это должно быть команда. , Когда Вы выполняетесь /root/Documents/text1.txt > /root/Documents/text2.txt, Вы говорите, что оболочка к выполняется /root/Documents/text1.txt, который, вероятно, не будет даже работать, так как текстовые файлы не должны иметь выполнить набора флага и сохранять стандартный вывод к /root/Documents/text2.txt. Так как стандартный вывод от той "команды" пуст, конечный файл будет пуст.

1
ответ дан 23 November 2019 в 06:09

Управляйте перенаправлением вывода:

ls > file.txt

ls дает список каталогов, и вывод команды ls перенаправляется к file.txt.

Ошибочное Перенаправление:

command 2>~/Desktop/errorsfile.txt

Это перенаправит ошибочный результат команды к txt файл.

Для переадресации контента файла:

  1. cat file1 > file2 (скопирует содержание file1 в новый файл file2)
  2. cat file2 >> file1 (здесь скопирует содержание file2 в существующий файл file1, не удаляя его содержание)
  3. cat file1 file2 > file3 (Это добавило бы содержание 'file1' и 'file2' и затем записало бы это содержание в новый файл, названный 'file3')

я также хотел бы добавить Перенаправление ввода:

$ mail -s "Hello World" user@yourmaildomain.com < /home/user/mailcontent.txt

Здесь, если почтовое тело находится в файле тогда, мы можем использовать его непосредственно для отправки почты.

0
ответ дан 23 November 2019 в 06:09

Как другие уже заявили, Вы пропускаете команду. Вот некоторые интересные комбинации:

cat <file1.txt >file2.txt
tail <file1.txt >file2.txt
head <file1.txt >file2.txt
wc -l <file1.txt >file2.txt
base64 <file1.txt >file2.txt
base64 -D <file1.txt >file2.txt
gzip -c <file1.txt >file2.txt
gunzip -c <file1.txt >file2.txt

дух передачи по каналу/перенаправления указывает, что команда (такая как копирование, извлечение, подсчет, кодирование/декодирование, сжимая/распаковывая) необходима для определения действия для преобразования входа file1.txt в вывод file2.txt.

0
ответ дан 23 November 2019 в 06:09

Вы не можете использовать file1 > file2 скопировать file1содержание к file2 потому что нет никакой команды там. Необходимо дать некоторую команду.

  • Перенаправления относятся (1) к команде, которую Вы выполняете или (2) к оболочке в целом (если относится exec встроенный). Но они работают путем изменения источника или цели действий, которые выполняют входные-ouptut операции - то есть, которые читают из или пишут в файл или устройство. Необходимо на самом деле выполнить некоторое действие.
  • file1 > file2 допустимая команда, при некоторых обстоятельствах, но она не копирует file1 кому: file2. Вместо этого как l0b0 говорит, он пытается работать file1 как программа или сценарий, и - успешно выполняется ли это - отправляет стандартный вывод от выполнения file1 в file2. (Если file2 регулярный файл, он перезаписывается.)
  • Заманчиво думать что-то как <file1 >file2 работал бы. Но это не делает: когда Вы бросаете команду, никакая операция не выполняется. file1 используется в качестве входа и file2 используется в качестве вывода..., но так как ничто на самом деле не сделано, вывод пуст, единственный эффект к (a), создают file2 если это уже не существовало, или (b) делают file2 пустой, если это сделало:

    ek@Ilex:~$ echo foobar > file1
    ek@Ilex:~$ echo quux > file2
    ek@Ilex:~$ cat file1
    foobar
    ek@Ilex:~$ cat file2
    quux
    ek@Ilex:~$ <file1 >file2
    ek@Ilex:~$ cat file2
    ek@Ilex:~$ file file1 file2
    file1: ASCII text
    file2: empty
    

Вы, вероятно, просто хотите работать cp file1 file2.

Принятие, то есть, это file2 регулярный файл (или не существует, но Вы хотите, чтобы он существовал как регулярный файл после Ваших выполнений команды), необходимо, вероятно, просто использовать cp команда.

Как Sylvain Pineau говорит, можно использовать cat file1 > file2 также. Однако cp команда хорошего поведения при записи в файл, который уже существует: это перезаписывает цель с источником, но сохраняет исходную маску полномочий цели (и поэтому хорошо даже в ситуациях, где можно было бы интуитивно думать cat file1 > file2 были необходимы):

ek@Ilex:~$ echo glockenspiel > file1
ek@Ilex:~$ echo flugelhorn > file2
ek@Ilex:~$ cat file1
glockenspiel
ek@Ilex:~$ cat file2
flugelhorn
ek@Ilex:~$ chmod +x file2
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 11 Sep 16 03:28 file2
ek@Ilex:~$ cp file1 file2
ek@Ilex:~$ cat file2
glockenspiel
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 13 Sep 16 03:28 file2

Для добавления Вы, вероятно, хотите (другой вид) перенаправление.

Оба cp команда и перенаправление с > перезапишет содержание регулярного файла, если он будет существовать. Но >> перенаправление добавляет.

Таким образом, если Вы хотите добавить содержание file1 кому: file2 вместо перезаписи file2 с содержанием file1, перенаправление с >> (нет >) хороший выбор:

ek@Ilex:~$ echo 'Violets are blue.' > file1
ek@Ilex:~$ echo 'Roses are red.' > file2
ek@Ilex:~$ cat file1
Violets are blue.
ek@Ilex:~$ cat file2
Roses are red.
ek@Ilex:~$ cat file1 >> file2
ek@Ilex:~$ cat file2
Roses are red.
Violets are blue.
17
ответ дан 23 November 2019 в 06:09

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

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