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

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

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 usarlo lso hacerlo usando otro comando (como grep)?

Respuesta1

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

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

Explicación:

  • .: el directorio para iniciar findel
  • -path ./notHere: inicia una regla que coincidirá con la ruta./notHere
  • -prune: evita finddescender al directorio con la coincidencia actual
  • -o: agregue un orpara 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 versiones findaú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. finda menudo tiene una función incorporada para ayudar con eso, aunque no esas opciones específicas ls. Podrías reemplazar la -printbandera de arriba con -lsy ver si ese conjunto de lsopciones 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 findejecutado 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 -aopción (solo nombres). Si quieres utilizarlo -a, lo más sencillo es:

ls -la | grep -v skip_folder

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

ls -la | grep -v "skip folder"

información relacionada