Pegue os primeiros n arquivos de um diretório começando com uma letra específica em ordem alfabética para outro diretório

3

Eu preciso pegar os 3 primeiros arquivos de um diretório começando com a letra b em ordem alfabética para outro diretório. Eu criei este comando:

find /users/students/ejackson/A3-ejackson-55688-114906/CS282in \
  -name "b*" | sort | head -3

E produz os arquivos apropriados, mas não posso fazer nada com eles. Idealmente, eu apenas enviaria a saída do comando acima para mv , mas não acho que seja possível.

(P.S. Eu tenho que fazer isso sem grep , sed ou awk )

    
por Evan 23.02.2013 / 23:22

3 respostas

1

Em vez de analisar find output (muito má ideia), você pode aproveitar o fato de que for faz um loop sobre os arquivos de uma forma ordenada:

i=0; for b in /path/to/files/b*; do (( ++i < 4 )) && echo mv -v -- "$b" /path/to/destination; done

Remover echo após o teste para mover os arquivos.
Aqui está com comentários feios:

# set a variable to 0 so we can increment it
i=0
# glob for the files starting with b
for b in /path/to/files/b*; do 
   # test how many times the loop has been run and if it's less than 4...
   (( ++i < 4 )) && 
     # ... then move the files*  
     echo mv -v -- "$b" /path/to/destination
done

* Isso não acontecerá até que você remova echo do início da linha - em vez disso, ele irá ecoar quais arquivos serão movidos e onde (expandir as variáveis para cada iteração)

Eu não sei se isso funciona no tcsh, mas funciona no bash, então pode ajudar outros usuários do Ubuntu que usam principalmente o bash

    
por Zanna 09.04.2017 / 22:32
0

Você pode pegar uma lista de arquivos e processá-los através de um loop for em um shell script, ou se você estiver na própria linha de comando (será mais difícil de ler)

Confira este artigo em nixCraft . Outro tutorial também.

Você deve ser capaz de fazer algo como

for f in 'find /users/students/ejackson/A3-ejackson-55688-114906/CS282in -name "b*" | sort | head -3'
do
    cp $f [target]
done
    
por Eric G 23.02.2013 / 23:27
0

Você mencionou que está usando tcsh . A família dos C-Shells não é compatível com os Bourne Shells. Este comando pode funcionar:

set THREE_FILES='find …'
cp $THREE_FILES NEW_DIRECTORY

O primeiro comando set cria uma nova variável de ambiente chamada THREE_FILES e salva a saída nessa variável. O cp pega os três arquivos e os copia para o NEW_DIRECTORY .

    
por qbi 23.02.2013 / 23:28
___ tag123ubuntutouch ___ Perguntas sobre o Ubuntu Touch, a versão móvel para telefones e tablets. ___ answer261472 ___

Bases de toque do Ubuntu no CyanogenMod 10.1, então você deve usar o CM kernel para a placa smdk4210 que foi construída sobre o i9100. Além disso, não se esqueça de adicionar as alterações específicas do do Ubuntu ao defconfig em / arch / arm / configs / cm_i9100_defconfig

    
___ qstntxt ___

Gostaria de saber se posso usar fontes oficiais do Android Jelly Bean da Samsung, para o GS2 i9100, do Centro de Liberação de Software Livre da Samsung , para construir um porto de toque do Ubuntu, apesar das fontes CyanogenMod 10.1, no guia oficial de portabilidade.

    
___ O que é um pacote binário contaminado?