Eu tenho 10 arquivos na pasta Unix com a extensão .txt, aqui eu preciso separar todos os arquivos do arquivo fgh.txt (qualquer um), o que é o comando UNIX?

1

Eu tenho 10 arquivos na pasta Unix com extensão .txt. Aqui eu preciso separar todos os arquivos do arquivo fgh.txt (qualquer um). O que é o comando do UNIX?

1.abc.txt
2.bcd.txt
3.cde.txt
4.def.txt
5.efg.txt
6.fgh.txt
7.ghi.txt
8.hij.txt
9.ijk.txt
10.jkl.txt

Aqui, preciso separar todos os arquivos do arquivo 6.fgh.txt . O que é o comando do UNIX?

    
por Venkatesh Ganumukkala 30.08.2017 / 11:29

4 respostas

3

Com o comando find :

find . -type f -name "*.txt" ! -name "fgh.txt"
  • -name "*.txt" - para localizar arquivos com nomes correspondentes ao padrão (todo arquivo txt)

  • ! -name "fgh.txt" - exceto o nome de arquivo exato fgh.txt

Se os seus arquivos forem realmente prefixados com números (não tenho certeza sobre a edição dessa pergunta), altere a condição de negação para ! -name "*fgh.txt"

    
por 30.08.2017 / 11:38
3

A opção extglob do bash faz o truque :

Extended globbing as described by the bash man page:

?(pattern-list) Matches zero or one occurrence of the given patterns
*(pattern-list) Matches zero or more occurrences of the given patterns
+(pattern-list) Matches one or more occurrences of the given patterns
@(pattern-list) Matches one of the given patterns
!(pattern-list) Matches anything except one of the given patterns

Os comandos de que você precisa (para excluir qualquer arquivo *fgh.txt ):

shopt -s extglob
ls -d -- !(*fgh).txt

Se você deseja excluir um arquivo específico com base no nome completo do arquivo:

ls -d -- !(6.fgh.txt)
    
por 30.08.2017 / 13:00
2

Simples e elegante (assumindo o GNU ls ):

ls -I fgh.txt
    
por 30.08.2017 / 12:25
0

Se você quiser essa lista de arquivos em uma matriz, em zsh , você tem algumas opções:

setopt extendedglob # best in ~/.zshrc

# using the negation glob operator:
files=((^*fgh).txt)

# using the "except" glob operator:
files=(*.txt~*fgh*)

# trimming entries from the array afterwards:
files=(*.txt)
files=(${files:#*fgh*})

Em seguida, use sua matriz como quiser:

ls -ld -- $files
    
por 30.08.2017 / 13:39