Como outros já perceberam, há dois problemas com sua abordagem. Eles não têm nada a ver com os arquivos .zip
vs .sh
, mas com os nomes e localizações dos arquivos.
Você precisa colocar aspas duplas na substituição do comando. Caso contrário, eles quebram em caracteres espaciais. Veja Por que meu script de shell engasgar com espaço em branco ou outros caracteres especiais? para mais detalhes.
Além disso, o comando ls
exibe apenas o nome base do arquivo, sem a parte do diretório. Por isso, cp
só vê o nome base e não tem idéia de que você quis dizer arquivos em um diretório diferente. Uma maneira de corrigir isso é mudar para o diretório desejado primeiro.
cd /Users/Me/Documents/Coffi\ Work/FTP\ Backup\ Shell\ Script/Original/
cp -p "'ls -tr | tail -1'" ../Backup1/
Se você quiser apenas o arquivo zip mais recente e não o arquivo mais recente, o que quer que seja:
cd /Users/Me/Documents/Coffi\ Work/FTP\ Backup\ Shell\ Script/Original/
cp -p "'ls -dtr *.zip | tail -1'" ../Backup1/
Isso falhará com uma mensagem de erro estranha se o diretório estiver vazio ou se houver um nome de arquivo contendo novas linhas ou caracteres que não podem ser impressos na localidade atual, mas essas são circunstâncias relativamente raras.
A opção -d
é um pouco mais segura, caso haja um subdiretório cujo nome corresponda a *.zip
. Você não precisa da opção -1
, seu efeito é automático quando a saída de ls
é redirecionada para outro comando.
Alternativamente, você pode usar zsh , o que torna isso fácil e agradável graças ao seu Qualificadores de globo .
cp -p /Users/Me/Documents/Coffi\ Work/FTP\ Backup\ Shell\ Script/Original/*(om[1]) /Users/Me/Documents/Coffi\ Work/FTP\ Backup\ Shell\ Script/Backup1/