Через командный процессор мы можем перенаправить три стандарта filestreams так, чтобы мы могли быть введены или из файла или из другой команды вместо с нашей клавиатуры, и мы можем записать вывод и ошибки в файлы или отправить их, как введено за последующими командами.
Итак, почему мы не можем дать вход другому файлу как
~# /root/Documents/text1.txt > /root/Documents/text2.txt
Можно перенаправить содержание text1.txt с помощью эти cat
команда:
~# cat /root/Documents/text1.txt > /root/Documents/text2.txt
Примечание : можно использовать cat
, чтобы также создать новые двоичные файлы, например:
~# cat mypic.jpg > my_new_pic.jpg
Чтобы подробно остановиться ответ @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
. Так как стандартный вывод от той "команды" пуст, конечный файл будет пуст.
Управляйте перенаправлением вывода:
ls > file.txt
ls дает список каталогов, и вывод команды ls перенаправляется к file.txt.
Ошибочное Перенаправление:
command 2>~/Desktop/errorsfile.txt
Это перенаправит ошибочный результат команды к txt
файл.
Для переадресации контента файла:
cat file1 > file2
(скопирует содержание file1 в новый файл file2) cat file2 >> file1
(здесь скопирует содержание file2 в существующий файл file1, не удаляя его содержание) cat file1 file2 > file3
(Это добавило бы содержание 'file1' и 'file2' и затем записало бы это содержание в новый файл, названный 'file3') я также хотел бы добавить Перенаправление ввода:
$ mail -s "Hello World" user@yourmaildomain.com < /home/user/mailcontent.txt
Здесь, если почтовое тело находится в файле тогда, мы можем использовать его непосредственно для отправки почты.
Как другие уже заявили, Вы пропускаете команду. Вот некоторые интересные комбинации:
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
.
Вы не можете использовать file1 > file2
скопировать file1
содержание к file2
потому что нет никакой команды там. Необходимо дать некоторую команду.
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.