7 votos

Cómo enviar un archivo como entrada a otro archivo?

A través de la shell de comandos podemos redirigir el estándar de tres filestreams para que podamos tener una entrada desde un archivo o de otro orden, en vez de partir de nuestro teclado, y podemos escribir la salida y los errores a los archivos o enviarlos como entrada para los comandos posteriores.

Así que ¿por qué no podemos dar entrada a otro archivo como

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

17voto

Ken Liu Puntos 123

Usted no puede usar file1 > file2 copia file1's contenido a file2 debido a que no hay ningún comando de allí. Usted tiene que emitir algún comando.

  • Las redirecciones se aplican a (1) un comando a ejecutar o (2) el shell como un todo (si se aplica a la exec builtin). Pero ellos trabajan por cambiar la fuente o el destino de las acciones que realizan de entrada-ouptut operaciones, es decir, que leer o escribir a un archivo o dispositivo. Usted tiene que realizar alguna acción.
  • file1 > file2 es un comando válido, en algunas circunstancias, pero no copia file1 a file2. En su lugar, como l0b0 dice, intenta ejecutar file1 como un programa o script, y--si no se realiza correctamente--envía a la salida estándar de ejecución file1 a file2. (Si file2 es un archivo regular, que se sobrescribe.)
  • Es tentador pensar que algo como <file1 >file2 funcionaría. Pero no: cuando salga el comando, no se realiza ninguna operación. file1 se utiliza como entrada y file2 se utiliza como salida... pero ya nada de lo que realmente se hace, el resultado es vacío, el único efecto es: (a) crear file2 si no existe ya, o (b) file2 vacía si lo hizo:

    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
    

Usted probablemente sólo desea ejecutar cp file1 file2.

Suponiendo, que es, que file2 es un archivo normal (o no existe, pero quieres que existe como un archivo normal después de que el comando se ejecuta), probablemente debería utilizar simplemente la cp comando.

Como Sylvain Pineau, dice, puede utilizar cat file1 > file2 como bueno. Sin embargo, el cp comando se comportan bien cuando se escribe en un archivo que ya existe: sobrescribe el destino con la fuente, pero mantiene el objetivo original de la máscara de permisos (y por lo tanto es buena incluso en situaciones en las que uno puede pensar intuitivamente cat file1 > file2 eran necesarias):

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

A anexar, usted probablemente querrá una (de diferente tipo) de la redirección.

Tanto el cp comando y la redirección de la con > va a sobrescribir el contenido de un archivo regular, si es que existe. Pero >> redirección anexa.

Así que si usted desea anexar el contenido de file1 a file2 en lugar de sobrescribir file2 con el contenido de file1, una redirección con >> (no >) es una buena opción:

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:~$ 

8voto

FARSHAD Puntos 31

Puede redirigir el contenido de text1.txt el uso de la cat comando:

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

Nota: puede utilizar cat también para crear nuevos archivos binarios, e.g:

~# cat mypic.jpg > my_new_pic.jpg

1voto

Soraz Puntos 120

Para ampliar @SylvainPineau la respuesta, la razón por la que no puede hacer /root/Documents/text1.txt > /root/Documents/text2.txt es que la cosa separada de la redirección del operador y el archivo después de que se ha de ser un comando. Al ejecutar /root/Documents/text1.txt > /root/Documents/text2.txt está diciendo la shell para ejecutar /root/Documents/text1.txt, que probablemente no incluso ejecutar desde archivos de texto, no han de tener el permiso de ejecución indicador establecido, y guardar la salida estándar a /root/Documents/text2.txt. Desde la salida estándar a partir de que el "comando" se vacía el archivo de destino estará vacía.

0voto

nux Puntos 10972

Comando Redirección de la salida :

ls > file.txt

ls da una lista de directorios y la salida del comando ls es redirigido a file.txt .

Error De Redirección :

command 2>~/Desktop/errorsfile.txt

Esto va a redirigir el resultado de error de comando a un txt archivo.

Para el contenido del archivo de redirección :

  1. cat file1 > file2 (se copia el contenido de archivo1 a un nuevo archivo archivo2)
  2. cat file2 >> file1 (aquí se copia el contenido de archivo2 a un archivo existente archivo1 sin borrar su contenido )
  3. cat file1 file2 > file3 (Esto habría que agregar el contenido de 'file1' y 'archivo2' y, a continuación, escribir estos contenidos en un nuevo archivo llamado 'archivo3' )

También me gustaría añadir La Redirección de Entrada :

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

Aquí si el cuerpo del correo se encuentra en un archivo, a continuación, podemos utilizar directamente para enviar el correo.

0voto

Eric Puntos 886

Como otros ya han dicho, te falta un comando. Aquí están algunas combinaciones interesantes:

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

El espíritu de la tubería/redirigir indica que un comando (como copiar, extraer, contando, codificación/decodificación, comprimir/descomprimir) es necesario para especificar la acción para transformar la entrada file1.txt en la salida file2.txt.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: