move o diretório e arquivos se o diretório contiver uma string específica (remove string do nome do diretório)

0

editado para explicar melhor a questão.

então eu quero escanear um diretório, procurar por subdiretórios contendo --import-me no final do nome do diretório, mover para um novo diretório com todos os arquivos contidos, apenas renomear o diretório sem as strings --import-me

cd $some-dir
for f in 'find . -name "*--import-me" '
do
rename=${f%--import-me}
echo mv $f "some-other-dir"/"$rename"
done

Eu obtenho

mv ./iZombie /some-other-dir/./iZombie
mv (2015)--import-me /some-other-dir/(2015)

Espero que me dê

mv ./some-other-dir/iZombie (2015)
    
por jasenmichael 11.11.2015 / 04:02

2 respostas

0

Parece, pelo seu exemplo, que os diretórios *--import-me existem apenas no diretório atual. Nesse caso, você pode usar este one-liner:

find . -type d -name "*--import-me" -exec sh -c 'mv $0 some-dir/${0%--import-me}' {} \;

Caso contrário, se você tiver diretórios de aninhamento, você deve usar este, note que se houver / no diretório de destino ( some-dir ) você terá que escapar deles \/ :

find . -type d -name "*--import-me" -exec sh -c 'mv $0 'echo $0| sed "s/.*\/\(.*\)--import-me/some-dir\//g"'' {} \;
    
por 11.11.2015 / 11:14
0

então parece que não consigo fazer isso funcionar, o nome do arquivo sempre é dividido em espaços, então ele tenta separar dois diretórios. isto é executado a partir de um script, idealmente seria encontrar diretórios contendo "* _import-me", renomear e mover em um comando, mas agora estou tentando mover dirs (de $ dldDir para $ libDir) contendo _import-me, então renomear dirs em libDir (removendo a string _import-me)

mv "$dldDir"/*_import-me "$libDir"
cd $libDir
find . -type d -name "*_import-me" -exec sh -c 'mv $0 'echo $0| sed "s/.*\/\(.*\)_import-me/"$libDir"\//g"'' {} \;

Então, o primeiro mv funciona, e um ls $ dldDir me dá

~# ls -1 $dldDir
Brother Bear 2 (2006)_import-me
Terminator Salvation (2009)_import-me

mas o segundo mv (removendo _import-me em $ libDir) recebo

mv: target ‘(2009)_import-me’ is not a directory
mv: target ‘(2006)_import-me’ is not a directory
    
por 11.11.2015 / 17:21