Excluir un directorio del comando `ls -R` en FreeBSD


0

Quiero enumerar todos mis archivos en un directorio en FreeBSD 9.2, pero no quiero incluir un directorio específico. Verifiqué ambos parámetros -Iy , pero solo ignora el modo de superusuario y no es compatible.--ignorelsI--ignore

¿Alguien tiene una idea de cómo usar lso hacer eso usando otro comando (como grep)?

Respuestas:


0

Si desea enumerar todos los archivos excepto aquellos dentro de un determinado directorio, por ejemplo, notHerepuede usar el findcomando para hacerlo como

find . -path ./notHere -prune -o -type f -print

Explicación:

  • .: el directorio para iniciar el finden
  • -path ./notHere: comienza una regla que coincidirá con la ruta ./notHere
  • -prune: evitar que finddescienda al directorio con la coincidencia actual
  • -o: agregue un orpara especificar qué queremos que suceda si la primera regla no coincide
  • -type f: solo coincide con archivos, no, digamos, directorios (elimine esto si desea ver también las entradas del directorio)
  • -print: a menudo no es necesario ya que es la acción predeterminada, pero algunas versiones de findtodavía quieren que diga expresamente que desea que se imprima el resultado

Usted menciona querer otro resultado (específicamente ls -ll) que no sea solo la lista de nombres de archivo. finda menudo tiene una función incorporada para ayudar con eso, aunque no esas opciones específicas para hacerlo ls. Puede reemplazar la -printbandera anterior con -lsy ver si ese conjunto de lsopciones está lo suficientemente cerca para usted:

find . -path ./notHere -prune -o -type f -ls

o si eso no es lo suficientemente bueno, podría haber findejecutado el comando que desea en lugar de intentar procesar la salida por separado como:

find . -path ./notHere -prune -o -type f -exec ls -ll {} +

No mencioné que necesito información de archivo, por lo tanto, su respuesta es la respuesta. Sin embargo, ¿qué debo hacer para obtener la información de cada archivo, como el tamaño y la fecha? (Necesito una salida como ls -ll. Sé que puedo enviar el resultado de búsqueda a un script de shell que contiene un while, pero creo que sería muy lento.
Neyman

Muchas versiones findincluso tienen una -lsque puedes usar en lugar de -print. La página de manual de Freebsd dice -lsque dará resultados como los ls -dgilsque podrían ser lo suficientemente cercanos para usted. De lo contrario, podría reemplazar -printcon el -exec ls -ll {} +que debería ser más rápido que tratar de procesar toda la salida manualmente con un whilebucle
Eric Renouf

Eso es exactamente lo que quiero. Sin embargo, no puedo hacer +1 todavía;)
Neyman

1

Utilizo este script para filtrar todas las carpetas con nombres que comienzan con '_'. Probablemente no funcionará con carpetas que tengan espacios, pero podría modificarlo.

#!/bin/sh

A=`ls /j/ | xargs | sed 's/_[a-z0-9]*//g' | awk '{$1=$1;print}'`
W=`echo $A | wc -w | tr -d '[[:space:]]'`
echo $W

En general, la parte que es interesante es esta:

ls some_folder | xargs | sed 's/_[a-z0-9]*//g'

La expresión regular _[a-z0-9]*contiene el patrón para que coincida con el nombre que debe excluirse.

Esto es si desea listas de carpetas sin la -aopción (solo nombres). Si desea usar, -aentonces el más simple es:

ls -la | grep -v skip_folder

¿Dónde skip_folderestá el nombre que desea excluir? Use comillas si la carpeta contiene espacios, por ejemplo:

ls -la | grep -v "skip folder"

ls -la | grep -v "skip folder"solo omite el nombre del directorio y su contenido permanece. Incluso utilicé ls -ll | pcregrep --color -v -M "directoryAddress(\n|.)*nextDirectoryFullAddress", lo que omite toda la lista. Sin embargo, no considero que sea una buena respuesta, porque la estructura del directorio puede cambiar (es decir, se puede agregar otra lista entre ellos) y se pierden algunos datos.
Neyman

Su pregunta es un poco confusa, ¿desea enumerar directorios de forma recursiva? Si desea enumerar todos los archivos en todos los directorios, excepto uno, lo mejor es findque puede seleccionar nombres específicos en función de la ruta, por ejemplo:find . | grep -v .ssh/id_rsa
Greg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.