¿Cómo ejecuta una ejecución en seco de rm para ver qué archivos se eliminarán?

87

Quiero ver qué archivos se eliminarán al realizar un rmin Linux. La mayoría de los comandos parecen tener una opción de ejecución en seco para mostrar tal información, pero parece que no puedo encontrar esa opción rm. ¿Es esto posible?

Cory Klein
fuente
También me gustaría ver qué archivos generarán errores por falta de permisos.
Simon Woodside

Respuestas:

121

Digamos que quieres correr:

rm *.txt

Solo puedes ejecutar:

echo rm *.txt

o incluso solo:

echo *.txt

para ver qué archivos rmeliminarían, porque es el shell expandiendo el *.txt, no rm.

El único momento en que esto no te ayudará es para rm -r.

Si desea eliminar archivos y directorios de forma recursiva, puede usarlos en findlugar de rm -r, por ejemplo,

find . -name "*.txt" -print

entonces, si hace lo que quieres, cambia -printa -delete:

find . -name "*.txt" -delete
Mikel
fuente
encontrar es una buena opción de la OMI. Y si quieres una presentación gráfica, úsala tree.
ruido sangrado
2
Casi perfecto. find . -name "*.txt" -deleteNo parece ser recursivo aunque. Se eliminaron todos los archivos, pero no se eliminaron los directorios que figuran en la lista-print
Oscar Godson
1
@OscarGodson Suponiendo que los directorios se dejaron vacíos después de eliminar los archivos, puede eliminarlos confind . -type d -empty -delete
datguy
1
@OscarGodson: findno eliminará los directorios que todavía contienen archivos (equivalente a rm dir/sin -r). Usted tendría que vaciar el directorio primero - o utilizar findpara -exec rmcon las opciones apropiadas para hacer esto. por ejemplofind . -depth -name "*.txt" -exec rm -r {} +
shalomb
Usar el echo rm *.txtmétodo parece tener un inconveniente. Presenta los resultados en una lista concatenada (una cadena larga con un archivo después del anterior), a diferencia de una lista vertical. ¿Hay alguna forma de hacer que la salida se muestre en una lista vertical (un archivo por línea)? (ACTUALIZACIÓN: veo que el findmétodo hace lo que he solicitado. Así que lo ejecutaré.)
inspirado el
16

Puedes decir:

rm -i

para ejecutarlo en modo interactivo, por lo que rmle pedirá que confirme si se debe eliminar cada archivo. Simplemente puede responder no a cada archivo para ver cuáles se verían afectados.

Justin Ethier
fuente
8
Esto es bastante difícil con una gran cantidad de archivos.
Cory Klein
99
si n | rm -i #comentario para cumplir con la longitud mínima de comentario
Joshua
4

Puede usar lspara enumerar todos los archivos que serán eliminados por rm:

ls ../path/*.txt

Si necesita una lista para ver los archivos que se eliminarán con un recursivo rm, use la -Rbandera con ls:

ls -R ../path/*.txt
Veneet Reddy
fuente
Buen punto. Aunque si conoces el nivel de anidación, entonces puedes lograrlols */*/*.txt
Veneet Reddy
1
Tienes razón. Con la -Ropcion.
Veneet Reddy