A questão está marcada com sed e grep , então presumo que haja interesse em uma resposta que use expressões regulares. Além disso, a pergunta indica que o arquivo de dados de entrada é grande e, portanto, suponho que o desempenho seja uma consideração.
Também presumo que, dado que o arquivo de entrada contém um nome de arquivo por linha, não haverá nomes de arquivos (patológicos) que contenham caracteres de nova linha.
As outras respostas geram efetivamente um processo cp
para cada arquivo. Isso causa uma redução de desempenho desnecessária. Em vez disso, podemos usar os recursos de xargs
para chamar cp
com tantos nomes de arquivos quanto couberem em uma linha de comando.
sed -rn 's/ (5[1-9]|[6-9].|1..)$//p' input.txt | tr '\n' 'sed -En 's/ (5[1-9]|[6-9].|1..)$//p' input.txt | tr '\n' 'sed -rn 's/ (5[1-9]|[6-9].|1..)$//p' input.txt | tr '\n' 'sed -En 's/ (5[1-9]|[6-9].|1..)$//p' input.txt | tr '\n' '%pre%' | xargs -0 -J {} cp {} /destdir
' | xargs -0 cp -t /destdir
' | xargs -0 -J {} cp {} /destdir
' | xargs -0 cp -t /destdir
O sed
usa uma expressão regular para corresponder ao intervalo numérico fechado (50, 200)
. Usar expressões regulares para desigualdades numéricas nem sempre é a coisa mais elegante a ser feita, mas, nesse caso, a expressão requerida é bastante direta.
Estamos assumindo que os nomes de arquivos não contêm novas linhas, mas podem conter outros caracteres inúteis, como espaços. xargs
lidará com isso corretamente se receber dados tr
-delimited, portanto, usaremos sed
para converter todas as novas linhas em caracteres nulos.
O acima assume as versões GNU de xargs
e sed
. Se em vez disso você tiver versões do BSD (por exemplo, OSX), o comando será um pouco diferente:
%pre%
Esses comandos geram exatamente uma cópia de tr
, xargs
e cp
. Haverá mais de um spawn de xargs
, mas cada um copiará vários arquivos - cp
tentará preencher cada linha de comando %code% para obter uma utilização eficiente. Isso deve fornecer uma melhoria de desempenho significativa em relação às outras respostas quando os dados de entrada são grandes.