
Quiero enumerar todos mis archivos en un directorio en FreeBSD 9.2, pero no quiero incluir un directorio específico. Verifiqué ambos parámetros -I
y , pero solo ignora el modo de superusuario y no es compatible.--ignore
ls
I
--ignore
¿Alguien tiene una idea de cómo usarlo ls
o hacerlo usando otro comando (como grep
)?
Respuesta1
Si desea enumerar todos los archivos excepto aquellos dentro de un determinado directorio, digamos, notHere
puede usar el find
comando para hacerlo como
find . -path ./notHere -prune -o -type f -print
Explicación:
.
: el directorio para iniciarfind
el-path ./notHere
: inicia una regla que coincidirá con la ruta./notHere
-prune
: evitafind
descender al directorio con la coincidencia actual-o
: agregue unor
para especificar lo que queremos que suceda si la primera regla no coincide-type f
: solo coincide con archivos, no, por ejemplo, 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 versionesfind
aún quieren que diga expresamente que desea que se imprima el resultado.
Mencionas que quieres otro resultado (específicamente ls -ll
) además de la lista de nombres de archivos. find
a menudo tiene una función incorporada para ayudar con eso, aunque no esas opciones específicas ls
. Podrías reemplazar la -print
bandera de arriba con -ls
y ver si ese conjunto de ls
opciones es lo suficientemente cercano para ti:
find . -path ./notHere -prune -o -type f -ls
o si eso no es lo suficientemente bueno, podrías haber find
ejecutado el comando que deseas en lugar de intentar procesar la salida por separado como:
find . -path ./notHere -prune -o -type f -exec ls -ll {} +
Respuesta2
Utilizo este script para filtrar todas las carpetas con nombres que comienzan con '_'. Probablemente no funcione con carpetas que tengan espacios, pero puedes 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 que debe coincidir con el nombre que debe excluirse.
Esto es si desea enumerar carpetas sin la -a
opción (solo nombres). Si quieres utilizarlo -a
, lo más sencillo es:
ls -la | grep -v skip_folder
¿Dónde skip_folder
está el nombre que desea excluir? Utilice comillas si la carpeta contiene espacios, por ejemplo:
ls -la | grep -v "skip folder"