Como copiar arquivos da pasta sem a própria pasta

23

Estou tentando copiar arquivos e subpastas da pasta A sem o A . Por exemplo, a pasta A contém o seguinte:

| file1.txt   
| file2.txt    
| subfolder1   

Executar o próximo comando me dá um resultado errado:

sudo cp -r /home/username/A/ /usr/lib/B/

O resultado é

/usr/lib/B/A/...copied files...

em vez de ...

/usr/lib/B/...copied files...

Como posso alcançar o esperado sem origem-pasta

    
por pushandpop 25.01.2015 / 15:46

3 respostas

44

cp avançado

cp -r /home/username/A/. /usr/lib/B/

Isso é especialmente bom porque funciona, não importa se o diretório de destino já existe.

globo ocular

Se não houver muitos objetos no diretório, você poderá usar o shell globbing:

mkdir -p /usr/lib/B/
shopt -s dotglob
cp -r /home/username/A/* /usr/lib/B/

rsync

rsync -a /home/username/A/ /usr/lib/B/

O / no final do caminho de origem é importante; funciona, não importa se o diretório de destino já existe.

encontre

mkdir -p /usr/lib/B/
find /home/username/A/ -mindepth 1 -maxdepth 1 -exec cp -r -t /usr/lib/B/ {} +

ou se você não precisar de subdiretórios vazios:

find /home/username/A/ -mindepth 1 -type f -exec cp --parents -t /usr/lib/B/ {} +

(sem mkdir )

    
por 25.01.2015 / 15:55
8

Se em um sistema GNU, de man cp :

   -T, --no-target-directory
          treat DEST as a normal file

Isso permite que você escreva cp -rT /home/username/A/ /usr/lib/B/ para fazer exatamente a coisa certa.

    
por 25.01.2015 / 16:01
3

Diga a cp para copiar o conteúdo do diretório e não o próprio diretório:

sudo cp -r /home/username/A/* /usr/lib/B/
    
por 25.01.2015 / 15:48