Tenho uma pasta grande de fotos (milhares) e uma longa lista de arquivos, pelo nome exato do arquivo, que preciso copiar para outra pasta. Quero saber se existe uma maneira de selecionar vários arquivos específicos desta pasta, por nome, e copiá-los para outra pasta, usando o terminal, sem copiá-los individualmente?
command-line
files
Alguém com muitas fotos demais
fonte
fonte
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
ondep
é para copiar a permissão da pasta.Respostas:
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.
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:
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.
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: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
"o arquivo não existe" e solicitará que você "pressione enter" para continuar e o script continuará copiando o restante da lista.
/
trilha no caminho para odiretório de origem e no caminho para o diretório de destino. Caso contrário, o script cuspirá um erro de volta para você.
fonte
cp $(pwd)/{file1,file2} /path/to/dst/
ou sejacp $(pwd)/{file1,file2} $(pwd)/{renamed1,renamed2}
, etc.Talvez esteja faltando um detalhe da sua pergunta, mas as respostas dadas parecem excessivas. Se você deseja uma solução de linha de comando e não um script, por que não:
O bom de fazer dessa maneira é que você pode tabular os nomes dos arquivos
fonte
brew install coreutils
então você pode obter coisas gnu usuais comg
prefixo. Então, isso será o seguintegcp -t ....
cp
, e particularmente o OpenBSD e o FreeBSD não têm essa opção, então sim - isso écp
específico ao GNU . Também não é especificado pelo padrão POSIX . Uma vez que este é o Ubuntu site específico, isto é aceitável, mas para portar certificados entre sistemas operacionais, é melhor ficar com padrão POSIXAqui está uma solução pura para o bash. Ele lerá os nomes de arquivos de um arquivo de entrada (um por linha) e copiará cada um deles, renomeando duplicatas.
Salve este script em uma pasta no seu
$PATH
e chame-o com a lista de caminhos como entrada:Você também pode executar a coisa toda como um comando no terminal:
fonte
Conforme descrição da pergunta, meu entendimento é que:
input.txt
Assim, pode-se usar o seguinte comando:
Explicação:
-I %
especifica o símbolo do arquivo processado atualmente a ser usado no comando--arg-file=input.txt
especifica receber argumentos para comandar deinput.txt
cp /path/to/origin_dir/% /path/to/destination/
executará ocp
comando/path/to/origin_dir/%
sendo substituído por/path/to/origin_dir/
e nome do arquivo processado atualmente.Exemplo prático:
fonte