Quero fazer backup apenas das minhas pastas de música FLAC. Os arquivos FLAC podem ser aninhados assim dentro das pastas:
AlbumName/
├── Files/
│ ├── someSong01.flac
│ ├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Como copiar e mover todas as pastas do AlbumName com a estrutura e o conteúdo correspondentes que contêm algum lugar dentro de pelo menos um arquivo FLAC (presumo que isso seja suficiente para dizer: a música está no formato FLAC)
EDIT: arquivos FLAC podem ser aninhados; para que eu possa ter:
AlbumName2/
├── someSong01.flac
├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
| └── someCover02.jpg
E eu quero copiar essas pastas com todo o seu conteúdo, não apenas os arquivos FLAC, e colar em outro diretório.
Então, se eu tiver também
AlbumName3/
├── someSong01.mp3
├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
| └── someHiddenSong.flac
e
AlbumName4/
├── Files/
│ ├── someSong01.mp3
│ ├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Quero cp recursivamente para outro diretório AlbumName, AlbumName2 e AlbumName3, mas não AlbumName4
EDITAR: Nenhuma das respostas estava realmente fazendo o que eu quero, então acabei usando algo parecido com isto:
find -mindepth 2 -name '*.flac' -exec dirname {} \; | awk -F "/" '{print $2}' | sort -u | while read -r dirname; do cp -r "$dirname" "backup/"; done
basicamente listo todos os arquivos flac, recupero a pasta raiz usando o awk, apago as duplicatas e faço o que quero
fonte
Respostas:
Uma opção é usar o rsync, que copia apenas arquivos flac e preserva a estrutura de diretórios:
fonte
oi meu amigo voce pode usar
fonte
--parents
antes!*/*.flac
!cp -r --parents AlbumName/ newdirectory/
Não será suficiente?shopt -s globstar
) e usá-lo**/*.flac
para o glob. A estrela dupla corresponderá a zero ou mais diretórios.Boas respostas
Quero adicionar mais uma maneira, você também pode usar uma combinação de find e cpio
find . -name "*.flac" -print0|cpio --null -pdm destination/
Também é possível usar
rsync
ou escrever um script de shell para encontrar e copiar arquivos com a estrutura de diretórios.fonte
Resposta 1: Você também pode usar o
find
comando para o mesmo.Explicação:
mkdir
cria um novo diretório.find
O comando localiza*.flac
arquivos localizados naAlbumName
pastaexec
O comando executa ocp
comando para cada nome de arquivo quefind
retornado.Resposta 2: Você também pode usar o
find
comandoxargs
tambémMais informações: find , xargs
fonte
find | xargs
quebrará nomes de arquivos com espaços, emfind -print0 | xargs -0
vez disso , use .1 2.flac
arquivo que tem espaço no nome do arquivo. Você pode me informar o nome do arquivo em quefind | xargs
falha?find -print0 | xargs -0
touch "a space" && find . | xargs ls
.Só tive que resolver o mesmo problema para minha biblioteca de músicas e resolvi-o usando o seguinte script adaptado. Eu não o projetei totalmente com variáveis ie, pois pretendo usá-lo apenas uma vez :).
O script move todos os diretórios que contêm arquivos flac, incluindo todos os outros arquivos e subdiretórios, para um novo local usando rsync. O rsync permite que você retome o script se ele parar durante o processo.
A estrutura da minha biblioteca:
Nova estrutura de biblioteca:
(1) inicie o seguinte script de shell no destino SOURCE (substitua TARGET pelo respectivo diretório de sua escolha - eu apenas usei o caminho absoluto)
linha 1: encontre todos os diretórios que contêm arquivos flac e pipe (|) que estão na
linha 2 da classificação : remova duplicados com a classificação e o canal que fazem parte da
linha 3 do loop do para cada diretório da
linha 4: mostre o diretório na
linha 5 do processo : rsync no diretório de destino, além de remover a origem e preservar a estrutura (-R) na
linha 6 do local de destino : remover o diretório vazio (como o rsync remove apenas os arquivos)
(2) após a execução bem-sucedida do script em (1), você pode executar o seguinte comando no diretório de origem
Este comando exclui todos os diretórios vazios não excluídos no script. Ou seja, diretórios "Artista", onde todas as subpastas / álbuns incluíam arquivos flac.
fonte