** / não está funcionando com um volume montado

3

Estou tentando extrair recursivamente um conjunto de .jpgs de um volume montado usando o SMB1 para uma pasta no meu computador. Aqui está o que eu tenho:

cp -a **/97*.jpg /Users/.../All_Covers

Isso funciona enquanto meu diretório atual e as imagens estiverem em algum lugar no meu computador, mas assim que eu cd para o volume montado onde os diretórios que contêm as imagens reais, ele falha, me dando um:

cp: **/97*.jpg: No such file or directory

Por que isso está falhando? Existe uma solução alternativa?

    
por Emmett R. 08.01.2014 / 23:56

1 resposta

2

De acordo com man bash :

globstar
                  If set, the pattern ** used in a pathname expansion context will match all files and zero or more directories and  sub‐
                  directories.  If the pattern is followed by a /, only directories and subdirectories match.

Em outras palavras, se você tiver cd para o diretório com o jpgs, nenhum corresponderá porque **/97*.jpg corresponde apenas a jpgs em um subdiretório.

Solução alternativa : use find :

find . -name '*.jpg' -exec cp -a -t destination/ {} +

Isso localiza todos os arquivos *.jpg a qualquer profundidade no diretório atual ( . ) e os copia para destination/ .

A opção -t dir diz a cp para copiar arquivos para o destino dir . Se o seu cp não suporta isso, existe uma solução alternativa:

find . -name '*.jpg' -exec cp -a {} destination/ \;

Isso é menos "eficiente" do que a versão anterior porque cp é executado em todos os arquivos ( {} ) em vez de apenas uma vez para todos os nomes de arquivos que podem ser ajustados em uma linha de comando ( {} + ) .

    
por 09.01.2014 / 00:04