Nowe posty

Autor Wątek: Segregowanie i przenoszenie plików do folderów  (Przeczytany 2364 razy)

mes mariusz

  • Gość
Segregowanie i przenoszenie plików do folderów
« dnia: 2017-05-11, 13:19:50 »
Witam.

Pojedynczy program / gra (na Amigę) składa się z kilku wirtualnych dyskietek .adf (plików .adf)



Usiłuję dla każdej gry / programu stworzyć folder, i wrzucić do niego wszystkie dyskietki składające się na grę / program.

Próbuję tak:

#!/bin/bash

ls ./adf/ > ./001_ls_result.txt
cut -f1-2 -d"(" ./001_ls_result.txt > ./002_cut_after_bracket_result.txt
uniq ./002_cut_after_bracket_result.txt > ./003_list_of_unique_folders.txt
mkdir "./folders/"
while read a; do : ; mkdir "./folders/$a" ; done < ./003_list_of_unique_folders.txt
while read a; do : ; mv "./adf/$a*" "./folders/$a/" ; done < ./003_list_of_unique_folders.txt

Czyli:

1. listuję zawartość folderu ./adf do pliku ./001_ls_result.txt

Xenomorph (1990)(Pandora)[cr Miracle].adf
Xenomorph (1990)(Pandora)[cr VF][a][no title screen].adf
Xenomorph (1990)(Pandora)[cr VF][no title screen].adf
Xenomorph (1990)(Pandora)(Disk 1 of 2)[cr FLT][a].adf
Xenomorph (1990)(Pandora)(Disk 1 of 2)[cr FLT].adf
Xenomorph (1990)(Pandora)(Disk 2 of 2)[cr FLT].adf
Xenon (1988)(Melbourne House)[a2].adf
Xenon (1988)(Melbourne House)[a3].adf
Xenon (1988)(Melbourne House)[a].adf
Xenon (1988)(Melbourne House).adf
Xenon (1988)(Melbourne House)[cr A-Ha][h British Bulldogs].adf
Xenon (1988)(Melbourne House)[cr BS1 - TKT].adf
Xenon (1988)(Melbourne House)[cr BS1 - TKT][t +1 BS1 - TKT].adf
Xenon (1988)(Melbourne House)[cr TNG].adf
Xenon 2 - Megablast (1989)(Image Works)[cr VF][a].adf
Xenon 2 - Megablast (1989)(Image Works)[cr VF].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr Black Monks].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr Black Monks][t +40 Black Monks].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr BS1][h Deejay99][t +3 BS1].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr BS1][t +3 BS1][a].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr BS1][t +3 BS1].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr PNA][a].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr PNA].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 1 of 2)[cr QTX].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 2 of 2)[cr BS1][t +3 BS1][a].adf
Xenon 2 - Megablast (1989)(Image Works)(Disk 2 of 2)[cr BS1][t +3 BS1].adf
Xenon 2 - Megablast (demo-playable) (1989)(Image Works).adf
Xenon 2 - Megablast (demo-playable) (1989)(Image Works)[v Byte Bandit].adf
Xenophobe (1989)(MicroStyle)[cr Subway][t +2 Subway][a].adf
Xenophobe (1989)(MicroStyle)[cr Subway][t +2 Subway].adf
Xenophobe (1989)(MicroStyle)(Disk 1 of 2)[cr VF].adf
Xenophobe (1989)(MicroStyle)(Disk 1 of 2)[cr VF][t Slipstream].adf
Xenophobe (1989)(MicroStyle)(Disk 2 of 2)[cr VF].adf
Xenophobe (1989)(MicroStyle)(Disk 2 of 2)[cr VF][t Slipstream].adf
X-Fighter (demo-playable) (1995)(Thalion).adf
Xiphos (1990)(Electronic Zoo)(M3)(Disk 1 of 2)[cr QTX].adf
Xiphos (1990)(Electronic Zoo)(M3)(Disk 1 of 2)[cr QTX][h Spaikers].adf
Xiphos (1990)(Electronic Zoo)(M3)(Disk 2 of 2)[cr QTX].adf
Xiphos (1990)(Electronic Zoo)(M3)(Disk 2 of 2)[cr QTX][h Spaikers].adf
X-It (1995)(Psygnosis)(Disk 1 of 2)[a2].adf
X-It (1995)(Psygnosis)(Disk 1 of 2)[a].adf
X-It (1995)(Psygnosis)(Disk 1 of 2).adf
X-It (1995)(Psygnosis)(Disk 1 of 2)[t +16 ATX].adf
X-It (1995)(Psygnosis)(Disk 2 of 2)[a].adf
X-It (1995)(Psygnosis)(Disk 2 of 2).adf
Xmas Lemmings (demo-playable) (1991)(Psygnosis)[a2].adf
Xmas Lemmings (demo-playable) (1991)(Psygnosis)[a3].adf

2. Wycinam wszystko od drugiego nawiasu tworząc plik ./002_cut_after_bracket_result.txt

Xenomorph (1990)
Xenomorph (1990)
Xenomorph (1990)
Xenomorph (1990)
Xenomorph (1990)
Xenomorph (1990)
Xenon (1988)
Xenon (1988)
Xenon (1988)
Xenon (1988)
Xenon (1988)
Xenon (1988)
Xenon (1988)
Xenon (1988)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (demo-playable)
Xenon 2 - Megablast (demo-playable)
Xenophobe (1989)
Xenophobe (1989)
Xenophobe (1989)
Xenophobe (1989)
Xenophobe (1989)
Xenophobe (1989)
X-Fighter (demo-playable)
Xiphos (1990)
Xiphos (1990)
Xiphos (1990)
Xiphos (1990)
X-It (1995)
X-It (1995)
X-It (1995)
X-It (1995)
X-It (1995)
X-It (1995)
Xmas Lemmings (demo-playable)
Xmas Lemmings (demo-playable)

3. Usuwam powtarzające się linie, tworząc plik ./003_list_of_unique_folders.txt

Xenomorph (1990)
Xenon (1988)
Xenon 2 - Megablast (1989)
Xenon 2 - Megablast (demo-playable)
Xenophobe (1989)
X-Fighter (demo-playable)
Xiphos (1990)
X-It (1995)
Xmas Lemmings (demo-playable)
Xorron 2001 (1989)
X-Out (1990)
X-Out (demo-playable)
XP8 (1996)
Xploit (1992)
XR35 Fighter Mission (1988)
X-Swap (1997)
XTreme Racing Data Disks v2.0 (1996)
XTreme Racing Track Disk (1996)
XTreme Racing v1.0 (1995)
Xybots (1989)

4. Zakładam osobny folder
5. W nim zakładam puste foldery dla gier / programów

Foldery zostały założone.




Teraz wypadałoby skopiować pliki .adf do odpowiednich folderów, i z tym niestety mam największy problem :-(

Chciałbym to zrobić tak:

while read a; do : ; mv "./adf/$a*" "./folders/$a/" ; done < ./003_list_of_unique_folders.txt

Ale, jak widać, nie da się:

# while read a; do : ; mv "./adf/$a*" "./folders/$a/" ; done < ./003_list_of_unique_folders.txt
mv: nie można wykonać stat na „./adf/Xenomorph (1990)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xenon (1988)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xenon 2 - Megablast (1989)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xenon 2 - Megablast (demo-playable)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xenophobe (1989)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/X-Fighter (demo-playable)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xiphos (1990)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/X-It (1995)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xmas Lemmings (demo-playable)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xorron 2001 (1989)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/X-Out (1990)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/X-Out (demo-playable)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/XP8 (1996)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xploit (1992)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/XR35 Fighter Mission (1988)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/X-Swap (1997)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/XTreme Racing Data Disks v2.0 (1996)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/XTreme Racing Track Disk (1996)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/XTreme Racing v1.0 (1995)*”: Nie ma takiego pliku ani katalogu
mv: nie można wykonać stat na „./adf/Xybots (1989)*”: Nie ma takiego pliku ani katalogu

I kręcę się w kółko, nie wiedząc jak sobie poradzić.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3047
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Segregowanie i przenoszenie plików do folderów
« Odpowiedź #1 dnia: 2017-05-11, 14:22:17 »
Gwiazdka (generalnie metaznaki) są rozwijane przez powłokę a nie przez program.

Czyli jak zrobisz cp *.c Backup, to konsola (bash, zsh, czy co tam używasz) rozwinie gwiazdkę i wywoła cp już z konkretnymi plikami (np cp a.c b.c c.c Backup).

Ale jak to samo zrobisz w skrypcie, w cudzysłowie, to magiczność gwiazdki znika. Możesz to naprawić wyciągając gwiazdkę z cudzysłowu:
mv "./adf/$a"* "./folders/$a/"
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

mes mariusz

  • Gość
Odp: Segregowanie i przenoszenie plików do folderów
« Odpowiedź #2 dnia: 2017-05-11, 16:27:33 »
Działa! Rewelacja!

Dzięki piękne! :-)