copia file ogni n file

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Luke Skywalker
Prode Principiante
Messaggi: 21
Iscrizione: giovedì 7 gennaio 2016, 12:53
Sesso: Maschile

copia file ogni n file

Messaggio da Luke Skywalker »

ho una directory con file denominati come segue:
file_000001.gz
file_000002.gz
file_000003.gz

e così via. volevo copiarli in un'altra directory ogni 4 file. Mi piacrebbe usare cp. La sintassi seguente:

Codice: Seleziona tutto

cp file_*{00..99..4}.gz selected
copia effettivamente ogni 4 file controllando il numero progressivo nel nome del file, però ha il limite che controlla da 00 a 99, mentre potrei averne molti di più. C'è un modo per generalizzare il comando indipendentemente dal numero di file presenti nella directory?
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 13164
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: copia file ogni n file

Messaggio da thece »

:ciao:

Codice: Seleziona tutto

for i in {0..10000..4}; do cp file_$(printf "%05d" $i).gz selected; done
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: copia file ogni n file

Messaggio da crap0101 »

Codice: Seleziona tutto

crap0101@orange:/tmp/foo$ ls
crap0101@orange:/tmp/foo$ touch file_{00..1000..10}.gz
crap0101@orange:/tmp/foo$ ls
file_0000.gz  file_0210.gz  file_0420.gz  file_0630.gz  file_0840.gz
file_0010.gz  file_0220.gz  file_0430.gz  file_0640.gz  file_0850.gz
file_0020.gz  file_0230.gz  file_0440.gz  file_0650.gz  file_0860.gz
file_0030.gz  file_0240.gz  file_0450.gz  file_0660.gz  file_0870.gz
file_0040.gz  file_0250.gz  file_0460.gz  file_0670.gz  file_0880.gz
file_0050.gz  file_0260.gz  file_0470.gz  file_0680.gz  file_0890.gz
file_0060.gz  file_0270.gz  file_0480.gz  file_0690.gz  file_0900.gz
file_0070.gz  file_0280.gz  file_0490.gz  file_0700.gz  file_0910.gz
file_0080.gz  file_0290.gz  file_0500.gz  file_0710.gz  file_0920.gz
file_0090.gz  file_0300.gz  file_0510.gz  file_0720.gz  file_0930.gz
file_0100.gz  file_0310.gz  file_0520.gz  file_0730.gz  file_0940.gz
file_0110.gz  file_0320.gz  file_0530.gz  file_0740.gz  file_0950.gz
file_0120.gz  file_0330.gz  file_0540.gz  file_0750.gz  file_0960.gz
file_0130.gz  file_0340.gz  file_0550.gz  file_0760.gz  file_0970.gz
file_0140.gz  file_0350.gz  file_0560.gz  file_0770.gz  file_0980.gz
file_0150.gz  file_0360.gz  file_0570.gz  file_0780.gz  file_0990.gz
file_0160.gz  file_0370.gz  file_0580.gz  file_0790.gz  file_1000.gz
file_0170.gz  file_0380.gz  file_0590.gz  file_0800.gz
file_0180.gz  file_0390.gz  file_0600.gz  file_0810.gz
file_0190.gz  file_0400.gz  file_0610.gz  file_0820.gz
file_0200.gz  file_0410.gz  file_0620.gz  file_0830.gz
crap0101@orange:/tmp/foo$ find . -type f | sort -V | sed -n '1~4p' | xargs cp -t /tmp/bar/
crap0101@orange:/tmp/foo$ ls /tmp/bar/
file_0000.gz  file_0240.gz  file_0480.gz  file_0720.gz  file_0960.gz
file_0040.gz  file_0280.gz  file_0520.gz  file_0760.gz  file_1000.gz
file_0080.gz  file_0320.gz  file_0560.gz  file_0800.gz
file_0120.gz  file_0360.gz  file_0600.gz  file_0840.gz
file_0160.gz  file_0400.gz  file_0640.gz  file_0880.gz
file_0200.gz  file_0440.gz  file_0680.gz  file_0920.gz
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Luke Skywalker
Prode Principiante
Messaggi: 21
Iscrizione: giovedì 7 gennaio 2016, 12:53
Sesso: Maschile

Re: copia file ogni n file

Messaggio da Luke Skywalker »

Grazie ragazzi per le risposte. in realtà ho bisogno di fare le copie ogni tot file solo di un tipo di file denominato file_xxxxx.gz, ma nella directory ci sono altri file che hanno anche loro una numerazione (es comp_xxxxx.gz ) ecco perchè avevo utilizzato

Codice: Seleziona tutto

cp file_*{00..99..4}.gz selected
in modo da ignorare glialtri tipi di file.

comunque se anche io inserisco 10000 al posto di 99 ... diffifilmente avrò il problema di avere più di 10000 file in directory.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: copia file ogni n file

Messaggio da UbuNuovo »

Puoi inserire la regex in find, che è meglio del globbing.

Codice: Seleziona tutto

find . -type f -regex 'PATTERN-CHE-VUOI' ...
Anche quelle estese:

Codice: Seleziona tutto

find -type f -regextype posix-extended -regex 'PATTERN-CHE-VUOI' ...
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti