Simplesmente copie vários arquivos de uma vez da linha de comando
Existem várias maneiras de conseguir isso. O mais fácil que eu já vi é usar o seguinte.
cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/
A sintaxe usa o comando cp seguido pelo caminho para o diretório em que os arquivos desejados estão localizados, com todos os arquivos que você deseja copiar entre colchetes e separados por vírgulas.
Certifique-se de observar que não há espaços entre os arquivos. A última parte do comando,, /home/usr/destination/
é o diretório no qual você deseja copiar os arquivos.
ou se todos os arquivos tiverem o mesmo prefixo, mas com finais diferentes, você poderá fazer algo assim:
cp /home/usr/dir/file{1..4} ./
Onde arquivo1, arquivo2, arquivo3 e arquivo4 seriam copiados.
De como você formulou a pergunta, acredito que é isso que você está procurando, mas também parece que você pode estar procurando um comando para ler uma lista de arquivos e copiá-los para um determinado diretório. Se for esse o caso, avise-me e editarei minha resposta.
Lidando com duplicatas com python
Então, escrevi um pequeno script python que acredito que deve fazer o trabalho. No entanto, não tenho certeza de quão bem você é versado em python (se é que é versado), então tentarei explicar como usar esse script da melhor maneira possível e por favor, faça quantas perguntas você precisar.
import os,sys,shutil
### copies a list of files from source. handles duplicates.
def rename(file_name, dst, num=1):
#splits file name to add number distinction
(file_prefix, exstension) = os.path.splitext(file_name)
renamed = "%s(%d)%s" % (file_prefix,num,exstension)
#checks if renamed file exists. Renames file if it does exist.
if os.path.exists(dst + renamed):
return rename(file_name, dst, num + 1)
else:
return renamed
def copy_files(src,dst,file_list):
for files in file_list:
src_file_path = src + files
dst_file_path = dst + files
if os.path.exists(dst_file_path):
new_file_name = rename(files, dst)
dst_file_path = dst + new_file_name
print "Copying: " + dst_file_path
try:
shutil.copyfile(src_file_path,dst_file_path)
except IOError:
print src_file_path + " does not exist"
raw_input("Please, press enter to continue.")
def read_file(file_name):
f = open(file_name)
#reads each line of file (f), strips out extra whitespace and
#returns list with each line of the file being an element of the list
content = [x.strip() for x in f.readlines()]
f.close()
return content
src = sys.argv[1]
dst = sys.argv[2]
file_with_list = sys.argv[3]
copy_files(src,dst,read_file(file_with_list))
Este script deve ser relativamente simples de usar. Primeiro, copie o código acima no programa gedit (deve estar pré-instalado no Ubuntu) ou em qualquer outro editor de texto.
Após a conclusão, salve o arquivo como move.py no diretório inicial (pode ser qualquer diretório, mas para facilitar as instruções, basta usar o diretório inicial) ou adicione o diretório em que o arquivo está contido no PATH. Em seguida, cd
vá para o diretório inicial (ou qualquer diretório que você salvou move.py in) no terminal e digite o seguinte comando:
python move.py /path/to/src/ /path/to/dst/ file.txt
Isso deve copiar todos os arquivos listados do diretório de origem para o diretório de destino, com duplicatas no formato pic (1) .jpg, pic (2) .jpg e assim por diante.
file.txt deve ser um arquivo que lista todas as imagens que você deseja copiar com cada entrada em sua própria linha separada.
De maneira alguma esse script deve afetar o diretório de origem, no entanto, certifique-se de inserir os caminhos corretos para o diretório de origem e destino e o pior que pode acontecer é que você copie os arquivos para o diretório errado.
Notas
- Este script supõe que todas as imagens originais estejam no mesmo diretório. Se você quiser verificar também os subdiretórios, o script precisará ser modificado.
- Se você digitar um nome de arquivo acidentalmente, o script emitirá o erro
"o arquivo não existe" e solicitará que você "pressione enter" para continuar e o script continuará copiando o restante da lista.
- Não esqueça a
/
trilha no caminho para o
diretório de origem e no caminho para o diretório de destino. Caso contrário, o script cuspirá um erro de volta para você.
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
ondep
é para copiar a permissão da pasta.