Exclui um diretório do comando 'ls -R' no FreeBSD

0

Eu quero listar todos os meus arquivos em um diretório no FreeBSD 9.2, mas não quero incluir um diretório específico. Eu verifiquei os parâmetros -I e --ignore para ls , mas I apenas ignora o modo superusuário e --ignore não é suportado.

Alguém tem uma ideia de como usar ls ou fazer isso usando outro comando (como grep )?

    
por Neyman 17.05.2016 / 10:18

2 respostas

0

Se você quiser listar todos os arquivos, exceto aqueles dentro de um determinado diretório, digamos, notHere , você pode usar o comando find para fazer como

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

Explicação:

  • . : o diretório para iniciar o find em
  • -path ./notHere : inicie uma regra que corresponda ao caminho ./notHere
  • -prune : impede que find entre no diretório com a correspondência atual
  • -o : adicione um or para especificar o que queremos que aconteça se a primeira regra não corresponder a
  • -type f : corresponde apenas a arquivos, não a diretórios (remova isso se quiser ver as entradas do diretório também)
  • -print : muitas vezes não é necessário, pois é a ação padrão, mas algumas versões de find ainda querem que você diga expressamente que deseja que o resultado seja impresso

Você mencionou querer outra saída (especificamente ls -ll ) do que apenas a lista de nomes de arquivos. O find geralmente tem um built-in para ajudar nisso, mas não essas opções específicas para ls . Você pode substituir o -print flag acima por -ls e ver se esse conjunto de ls está próximo o suficiente para você:

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

ou se isso não for bom o suficiente, você pode ter find executando o comando que você quer em vez de tentar processar a saída separadamente como:

find . -path ./notHere -prune -o -type f -exec ls -ll {} +
    
por 17.05.2016 / 14:55
1

Eu uso este script para filtrar todas as pastas com nomes que começam com '_'. Provavelmente não funcionará com pastas que tenham espaços, mas você poderá alterá-lo.

#!/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

Em geral, a parte interessante é esta:

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

O regex _[a-z0-9]* contém o padrão para corresponder ao nome que deve ser excluído.

Isto é, se você quiser pastas de listas sem a opção -a (apenas nomes). Se você quiser usar -a , o mais simples é:

ls -la | grep -v skip_folder

em que skip_folder é o nome que você deseja excluir. Use aspas se a pasta contiver espaços, por exemplo:

ls -la | grep -v "skip folder"
    
por 17.05.2016 / 11:04