opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[script] spostare file da molte cartelle a una sola usando regex #175

Closed pigreco closed 3 years ago

pigreco commented 3 years ago

In una cartella ho tre sottocartelle e per ognuna ho n sottocartelle; per ogni cartelle , a livello più basso, ho molti file con nomi e estensioni diversi (csv, txt, json): tramite l'utility fd ho individuato i file che mi interessano:

cartella/
│
├── cartella1/
│   ├── sottocartella1
│   │   ├── file1.csv
│   │   ├── file2.txt
│   │   ├── file1.json
│   │   ├── ...
│   ├── sottocartella2
│   │   ├── file10.csv
│   │   ├── file20.txt
│   │   ├── file10.json
│   │   ├── ...
│   ├── sottocartella3
│   │   ├── ...
├── cartella2/
│   ├── sottocartella1
│   │   ├── file100.csv
│   │   ├── file200.txt
│   │   ├── file100.json
│   │   ├── ...
│   ├── sottocartella2
│   │   ├── file1000.csv
│   │   ├── file2000.txt
│   │   ├── file1000.json
│   │   ├── ...
│   ├── sottocartella3
│   │   ├── ...
├── cartella3/
│   ├── sottocartella1
│   │   ├── fileA.csv
│   │   ├── fileB.txt
│   │   ├── fileC.json
│   │   ├── ...
│   ├── sottocartella2
│   │   ├── file10W.csv
│   │   ├── file20R.txt
│   │   ├── file10A.json
│   │   ├── ...
│   ├── sottocartella3
│   │   ├── ...

fd "^.+([A-Z]+[0-9]+|[A-Z])-particelle.csv$"

questi file vorrei spostarli in un'altra cartella e per farlo ho provato a usare il comando mv:

mv fd "^.+([A-Z]+[0-9]+|[A-Z])-particelle.csv$" miaCartella

ma restituisce un errore: image

come potrei risolvere?

aborruso commented 3 years ago

@pigreco hai guardato la guida di fd?

Devi usarlo in questa modalità https://github.com/sharkdp/fd#parallel-command-execution

Fai dei test su una cartella di test con qualche file. E se va, poi applica. Te lo dico perché mv è un comando distruttivo.

aborruso commented 3 years ago

Ok, visto che mi hai scritto che non è chiaro quanto riportato, aggiungo qualche elemento.

Due cose:

Se ad esempio ai una cartella con dei CSV, e in questa hai la sottocartella out, per copiare i file di output delle ricerca in out il comando sarà:

fd "^.+([A-Z]+[0-9]+|[A-Z])-particelle.csv$" -x cp {/} ./out
pigreco commented 3 years ago

usando il comando suggerito fd "^.+([A-Z]+[0-9]+|[A-Z])-particelle.csv$" ho verificato che i file ci sono, ma quando gli dico di copiarli mi segnala: image la sottocartella out esiste

aborruso commented 3 years ago

Perché nel tuo caso hai cartelle e sotto cartelle, quindi gli stai dicendo, dalla cartella in cui sei cp ./file.sv ./out.

Ma non c'è ./file.sv nella cartella in cui sei.

Se leggi la guida, c'è anche {}, il percorso completo. Cambialo in qualcosa come

fd "^.+([A-Z]+[0-9]+|[A-Z])-particelle.csv$" -x cp {} ./out/{/}
pigreco commented 3 years ago

@aborruso quello che mi serve è

fd "^.+([A-Z]+[0-9]+|[A-Z])-particelle.csv$" -x cp {} ./out

Funziona!!! :-) Grazie!

pigreco commented 3 years ago

@aborruso grazie ricetta pubblicata https://tansignari.opendatasicilia.it/ricette/bash/spostare_molti_file/