como mover ou copiar quantidades específicas de arquivos para outro diretório [duplicado]

0

Gostaria de saber como mover ou copiar um número específico de arquivos para outro diretório.

Por exemplo: Se eu tiver 880 arquivos no diretório A e quiser mover ou copiar 150 arquivos de A para o diretório B e também de 150-300 arquivos de A para o diretório C .

Eu já tentei este comando

$ find . -maxdepth 1 -type f | head -150 | xargs cp -t "$destdir"

Mas isso é copiar 880 arquivos para o diretório B

    
por Sunitha Bist 01.07.2017 / 11:12

2 respostas

0

Uma possível solução para mv 150 arquivos:

mv 'find ./ -maxdepth 1 -type f | head -n 150' "$destdir"

Troque mv para cp para copiar.

Aqui está um caso de teste:

mkdir d1 d2
cd d1
touch a b c d e f g h i j k l m n o p
cd ../
mv 'find ./d1 -type f | head -n 5' ./d2/

E o resultado:

ls d1 d2
d1:
b  c  d  e  g  h  i  k  m  n  o

d2:
a  f  j  l  p

Editar:

Aqui está um script simples que responderá ao seu comentário:

#!/bin/sh
# NOTE: This will ONLY WORK WITH mv.
# It will NOT work with cp.
#
# How many files to move
COUNT=150
# The dir with all the files
DIR_MASTER="/path/to/dir/with/files"
# Slave dir list - no spaces in the path or directories!!!
DIR_SLAVES="/path/to/dirB /path/to/dirC /path/to/dirD"

for d in $DIR_SLAVES
do
    echo "Moving ${COUNT} to ${d}..."
    mv 'find ${DIR_MASTER} -maxdepth 1 -type f | head -n ${COUNT}' "${d}"
done

exit

NOTA: O script de amostra não foi testado, mas deve funcionar.

    
por 01.07.2017 / 11:48
0

Caso o seu shell suporte process substitution , você pode tentar isto:

Os primeiros 150 feiles serão copiados para destdir_B e o NEXT 300 para destdir_C. Qualquer remanescente permaneceria intocado.

{
   head -n 150 | xargs -t cp -t "$destdir_B"
   head -n 300 | xargs -t cp -t "$destdir_C"
} <(find . -maxdepth 1 -type f)

Isto vem com as advertências habituais de não ser capaz de lidar com nomes de arquivos exóticos.

E quando você não tem < (...), você pode salvar a saída em um arquivo e redirecioná-lo para o {...}

HTH

    
por 01.07.2017 / 12:50

Tags