En Bash, supongamos que visito un directorio y luego otro directorio. Me gustaría copiar un archivo del primer directorio al segundo directorio, pero sin especificar los nombres de ruta largos de ellos. ¿Es posible?
Mi solución temporal es usarla /tmp
como un lugar temporal para almacenar una copia del archivo. cp myfile /tmp
cuando estoy en el primer directorio, y luego cp /tmp/myfile .
cuando estoy en el segundo directorio. Pero puedo verificar si el archivo sobrescribirá algo en /tmp
.
¿Hay algo similar a un portapapeles para copiar y pegar un archivo?
cd
comando, de modo que puedacd -
volver al directorio anterior, presionar la flecha hacia arriba para recuperar elcd
comando y editar la línea encp
lugar decd
. (ctrl-a (principio de línea), alt-d (palabracp -a
clave ) , ctrl-e (final de línea)).M-x term
puede usar el portapapeles de Emacs.Respuestas:
Usando Bash, solo visitaría los directorios:
Luego, usaría el acceso directo
~-
, que apunta al directorio anterior:Si uno desea visitar directorios en orden inverso, entonces:
fuente
"$OLDPWD"
. ¿Por qué trescp
comandos separados , sin embargo?cp -a ~-/file[1-3].txt .
cp
son ejemplos. En el mundo real, los caracteres comodín también se pueden usar para simplificar la tarea de copia.pushd
y analizardirs
... pero esto es mucho, mucho mejor. Le sugiero que agregue el hecho de que"$OLDPWD"
es exactamente equivalente~-
y más portátil (útil para aquellos que no lo usanbash
)~+
Es igualmente un acceso directo para"$PWD"
Si veía que esa situación se presentaba de forma puntual, podría:
Si hubiera directorios en los que me encontraba copiando archivos de forma regular, probablemente definiría algunas variables mnemotécnicas para ellos en mi .profile.
Editado para agregar:
Después de dormir en él, me pregunté qué tan cerca podría llegar a otros comportamientos de GUI / OS en los que selecciona algún número de archivos, los "corta" o los "copia", luego los "pega" en otro lugar. El mejor mecanismo de selección que pude encontrar fue su cerebro / preferencias más la función de bloqueo del shell. No soy muy creativo con los nombres, pero esta es la idea básica (en la sintaxis de Bash):
Para usarlo, coloque el código en ~ / .bash_profile, luego
cd
en el directorio de origen y ejecutecopyfiles glob*here
ocutfiles glob*here
. Todo lo que sucede es que su shell expande los globos y pone esos nombres de archivo en una matriz. Luego secd
dirige al directorio de destino y se ejecutapastefiles
, que ejecuta uncp
comando para cada archivo fuente. Si anteriormente había "cortado" los archivos, pegar archivos también elimina el archivo de origen (o intenta). Esto no verifica los errores (de los archivos existentes, antes de potencialmente bloquearlos con elcp
; o que tiene permisos para eliminar los archivos durante un "corte", o que puede volver a acceder al directorio de origen después de mudarse de eso).fuente
$OLDPWD
ya existe, que puede acortarse~-
en bash y zsh.Creo que
~-
es la respuesta correcta, pero tenga en cuenta que bash tiene un editor de línea incorporado que puede copiar / pegar texto.Si está en modo emacs, puede recuperar su
cd
comando del historial y usarlo Control-upara matar la línea en el "portapapeles" de bash llamado el anillo de matar (también hay otras formas). Luego puede tirar de esta cadena a un nuevo comando en cualquier momento con Control-y. Obviamente, en su ejemplo, esto depende de que haya utilizado un nombre de directorio absoluto en sucd
comando.También puede usar el interesante enlace de teclas predeterminado de Meta-.. Esto copia la última palabra del comando anterior en su línea actual. Si se repite, cada vez retrocede un comando en el historial. Así que si usted hace una
cd /x
, a continuación,cd /y
seguido porcd
Meta-.Meta-.usted tendrá/x
en su entrada.fuente
Ampliando la respuesta de Anderson M. Gomes , Bash le permite consultar cualquier directorio anterior en su pila de directorios escribiendo
~N
(o~+N
) dóndeN
está la posición en la pila de directorios. Por ejemplo:Ahora puede copiar un archivo entre dos directorios anteriores, ninguno de ellos el actual, con:
Para resolver el problema del póster original, haría lo siguiente:
Con un gran conjunto de archivos, puede enumerar sus nombres en un archivo de manifiesto y luego hacer la copia desde el directorio de origen:
Consulte también: esta sección de la página de manual de Bash
De manera similar, en Tcsh, puede usar la
=2
notación (en lugar de~2
) para referirse al segundo directorio en su pila de directorios.Consulte también: esta sección de la página de manual de Tcsh
fuente
cuando esté en el primer directorio, digamos la fuente o,
src
en resumen, ejecuteluego
cd
en el segundo directorio y ejecutar:la
-i
opción le preguntará si desea sobrescribir, si hay un archivo duplicadofuente
Una variación en la respuesta de anderson-m-gomes. Usando Bash, solo visitaría los directorios:
Luego, usaría la variable $ OLDPWD, que apunta al directorio anterior:
Si uno desea visitar directorios en orden inverso, entonces:
fuente
$OLDPWD
contiene espacios, esto se rompe. Además, siempre usocp -a
. Además, es lamentable que la finalización de tabulación se rompa en expansiones variables. Sin embargo, puede usar ctrl-alt-e para expandir la línea de comandos actual después de escribir la parte $ OLDPWD.~-
es un atajo para$OLDPWD
Si en bash, usaría pushd y popd . Estos comandos mantienen una práctica pila de directorios FIFO para su uso posterior. Puede consultar la pila en cualquier momento utilizando directorios .
Como tal lo haría:
fuente
Puedes usar
xclip
:Ejemplo:
Visite también xsel .
fuente
tar | gzip
entrada / salida del portapapeles X. Un poco torpe en comparación concp
, y no se generaliza a hacer enlaces simbólicos o enlaces duros. (cp -as
ocp -al
)Puede consultar el
clipboard-files
script aquí: https://github.com/larspontoppidan/clipboard-filesProporciona comandos como
ccopy
,ccut
ycpaste
que utilizan el portapapeles del entorno de escritorio y permiten copiar / pegar archivos de forma intuitiva:A medida que se usa el portapapeles del entorno de escritorio, la copia / pegado interactuará con los archivos colocados en el portapapeles en otros programas como administradores de archivos e IDE. Al menos funciona en escritorios tipo Gnome.
Revelación completa, escribí el guión después de dejar de encontrar algo así por ahí ...
fuente