Eu tenho uma pasta do Google Fotos. Isto é de um takeout de fotos do Google. A maneira como a entrega funciona é que existem várias pastas com nomes de datas
➜ ~/Google Photos => tree |head -n 20
.
├── 1979-12-31
│ ├── icon-24x24.png
│ ├── icon-24x24.png.json
│ ├── icon_local_color.png
│ ├── icon_local_color.png.json
│ ├── metadata.json
│ ├── viewer-14.png
│ ├── viewer-14.png.json
│ ├── viewer-28.png
│ └── viewer-28.png.json
├── 2001-07-24
│ ├── heic0109a.jpg
│ ├── heic0109a.jpg.json
│ └── metadata.json
├── 2003-01-06
│ ├── ASPdotNET_logo.jpg
│ ├── ASPdotNET_logo.jpg.json
│ ├── darkBlue_GRAD.jpg
│ ├── darkBlue_GRAD.jpg.json
Gostaria de mover todos os arquivos que não terminam em json para uma nova pasta chamada ./all_photos
. O problema é que posso ter dois arquivos com o mesmo nome em pastas.
Por exemplo na pasta 1979-12-31
posso ter um arquivo chamado a.jpg
e na pasta 2001-07-24
também posso ter outro arquivo chamado a.jpg
. As soluções que examinei movem os arquivos, mas substituem ou ignoram se houver uma possível substituição. Gostaria de alterar os nomes dos arquivos conforme mostrado: 1979-12-31_a.jpg
e 2001-07-24_a.jpg
. Isso garantirá que não haja arquivos com o mesmo nome e, portanto, nenhuma substituição.
Estou em um servidor Linux e imagino que a melhor maneira de fazer isso seria por meio do comando find do Linux, mas não tenho certeza dos comandos exatos, então gostaria de uma ajuda.
Um script que escrevi para resolver o problema. Provavelmente não é a maneira mais eficiente, mas se houver uma maneira mais eficiente, informe-me. Leva um parâmetro - o nome da pasta para a qual você gostaria de aplicar o script. No exemplo acima, eu executaria
./script.sh Google\ Photos
. Funciona para 2 níveis de subpastas.