Script Bash para mover arquivos para a pasta com base nos números de identificação correspondentes?

2

Em ~ / Desktop / a /, eu tenho arquivos e pastas com este padrão:

 500 photodir
 Photo 500.jpg
 1000 origindir
 Photo 1000.jpg

Gostaria que os jpgs fossem movidos para suas pastas, usando os números como marcadores de ID:

 500 photodir/Photo 500.jpg
 1000 origindir/Photo 1000.jpg

Este é o código até agora:

!#/bin/bash/
for f in ~/Desktop/a/*.jpg
do
  base=“${f%Photo*}”
  mv "$f" "$base/"
  mv "$sub/$f"* "$base/$sub/"
done
    
por user10630009 10.11.2018 / 05:51

1 resposta

1
#!/bin/bash
cd ~/Desktop/a/
for f in *.jpg; do
  target_part="${f%.jpg}"
  target="${target_part#Photo }"
  mv "$f" -t "${target} "*
done

Explicação

Existem duas substituições de parâmetros que ocorrem aqui. Em primeiro lugar, target_part="${f%.jpg}" remove o .jpg do nome do arquivo, então target="${target_part#Photo }" remove o Photo (+ espaço) na frente. Isso deixa o número na variável target .

Depois, você simplesmente move o arquivo para um diretório que começa com o número em target , ou seja, mv "$f" -t "${target} "* . Isso pressupõe que há apenas um nome de arquivo que começa com cada número e é um diretório.

Mais informações

Houve algumas coisas erradas no seu script. Em primeiro lugar, o shebang estava errado. Em vez de !# , deve ser #! .

Em segundo lugar, não tenho certeza se apenas um erro de digitação, mas a aspa dupla deve estar com " , não .

Eu também não sei por que o * em seu parâmetro substitui ${f%Photo*} , nem a que a variável $sub se refere (ele nunca foi atribuído).

Finalmente, em vez de usar ~/Desktop/a/*.jpg para o loop, preferi cd diretamente a ele, para facilitar a substituição de parâmetros.

    
por 10.11.2018 / 07:14