Eu tenho muitos arquivos em uma pasta, chamada like 00802_Bla_Aquarium_XXXXX.jpg
. Agora eu preciso copiar cada quarto arquivo para uma subpasta, dizendo selected/
.
00802_Bla_Aquarium_00020.jpg <= this one
00802_Bla_Aquarium_00021.jpg
00802_Bla_Aquarium_00022.jpg
00802_Bla_Aquarium_00023.jpg
00802_Bla_Aquarium_00024.jpg <= this one
00802_Bla_Aquarium_00025.jpg
00802_Bla_Aquarium_00026.jpg
00802_Bla_Aquarium_00027.jpg
00802_Bla_Aquarium_00028.jpg <= this one
00802_Bla_Aquarium_00029.jpg
Como eu faço isso?
ls
. Consulte também stackoverflow.com/q/4553751/789593, que pergunta sobre cada segunda linha.for n in $(seq -w 20 4 200); do cp "00802_..._00${n}" ...; done
Respostas:
Com o zsh, você pode fazer:
POSIX, mesma idéia, apenas um pouco mais detalhada:
Como esses nomes de arquivos não contêm caracteres em branco ou curinga, você também pode:
fonte
for i do
é padrão e, na verdade, mais portátil do quefor i; do
e é a maneira canônica de percorrer os parâmetros posicionais.No bash, uma possibilidade engraçada, que funcionará bastante bem aqui:
Essa é definitivamente a resposta mais curta e eficiente: sem subcamadas, sem laços, sem tubos, sem
awk
processo externo na enfermaria; apenas uma bifurcaçãocp
(que você não pode evitar de qualquer maneira) e uma expansão e glob do bash brace (dos quais você pode se livrar completamente, já que sabe quantos arquivos possui).fonte
cp 00802_Bla_Aquarium_*{03..99..4}.jpg selected
se você quiser3 mod 4
. (Estou usando o maravilhoso fato de que 100 é divisível por 4). Agora, sobre arquivos numerados continuamente, todas as outras respostas assumem o mesmo.Simplesmente com o bash, você pode:
O padrão
./*.jpg
será substituído por uma lista alfabética de nomes de arquivos, conforme declarado pelo bash man, portanto, ele deve se adequar ao seu objetivo.fonte
for
loop pode ser substituído com apenas esta linha:(((++n)%4)) || cp "$file" selected/
.;-)
. O problema, porém, é que você está criando umcp
para cada arquivo que não é realmente eficiente.Se você
ruby
instalou, pode usar a seguinte linha única. Observe que assume que o diretório selecionado existe.Ele pega uma lista de todos os arquivos com a extensão .jpg no diretório atual e as divide em listas de quatro elementos e copia o primeiro elemento de cada lista para o diretório selecionado no diretório atual.
fonte
Se você sabe que não terá novas linhas nos nomes dos arquivos, use:
fonte
Você pode usar um gerenciador de arquivos da GUI e redimensionar a borda da janela até que cada 5 arquivos ocupem uma linha e, em seguida, use o mouse para selecionar a primeira coluna ...
fonte
Observando stackoverflow.com/q/4553751/789593, que oferece uma solução para copiar todos os segundos como o @NN mencionado, uma solução muito simples seria:
Pode não ser muito eficiente, pois exige uma etapa extra de cópia, pois deve ser muito fácil de executar.
fonte