Nowe posty

question rDNS i directadmin (0)
Dzisiaj o 15:59:15
xx Edycja pliku tekstoego (1)
Dzisiaj o 09:27:03
xx Teraz a kiedyś (3)
Wczoraj o 20:24:05
xx modem od dostawcy (1)
Wczoraj o 19:52:56
xx Postfix jako SMTP Proxy (1)
2019-02-13, 17:01:01
xx Zabezpieczenie przed nieautoryzowanym serwerem DHCP (2)
2019-02-13, 16:24:09
xx Programy antywirusowe - gdzie mają zastosowanie (6)
2019-02-10, 23:05:29
xx Kompilacja kernela. (6)
2019-02-07, 12:08:41
xx Od jakiego linuxa zacząć (1)
2019-02-06, 14:53:46
xx Wtyczki Photoshopa w GIMPie, pod Xubuntu. (1)
2019-02-05, 20:03:39

Autor Wątek: [ROZWIĄZANY] wyszukanie nazw w pliku tekstowym i ich skopiowanie  (Przeczytany 1335 razy)

Offline kenpo

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 198
    • Zobacz profil
Potrzebuję skopiować z pliku tekstowego wszystkie wpisy o takiej formie [sound:różna_nazwa.mp3] a następnie na podstawie listy nazw tych plików skopiować je z jednego katalogu (gdzie są również inne pliki) do innego. Da się to jakoś zautomatyzować?

W Libreoffice Calc nie znalazłem żadnej gotowej opcji, która byłaby pomocna.

Nie jest to żadna praca domowa. Potrzebuję sobie zrobić bazę do programu do nauki słówek - Anki.
« Ostatnia zmiana: 2016-06-13, 18:17:42 wysłana przez kenpo »

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2092
  • 1709
    • Zobacz profil
Odp: wyszukanie nazw w pliku tekstowym i ich skopiowanie
« Odpowiedź #1 dnia: 2016-06-12, 21:40:09 »
Wyciągnięcie nazwy plików:
cat plik | grep -o 'sound[^3]*3'
Może być ? 
Komenda powstała na podstawie powieści ...  https://forum.linux.pl/index.php?topic=20990.0

zapisujesz do pliku dodając na końcu komendy
> plik2

Cytuj
następnie na podstawie listy nazw tych plików skopiować je z jednego katalogu
#    liczba lini w pliku
aa=$(cat plik2 | wc -l)

#    Petla
for i in `seq 1 $aa`
do
# info
echo "Linia nr. $i / $aa"

#  ab=linia z pliku
ab=$(awk 'NR=='$i plik2)
                 
                 #   kopiowanie
                 cp   $ab   gdzieś_indziej
 done

To juz lepiej zapisać do skryptu bash i uruchomić.
Przykład kursu basha z sieci http://dief.republika.pl/main.html
Orginalny:    http://mywiki.wooledge.org/BashGuide
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline kenpo

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 198
    • Zobacz profil
Odp: wyszukanie nazw w pliku tekstowym i ich skopiowanie
« Odpowiedź #2 dnia: 2016-06-13, 11:41:11 »
Z wyszukaniem nazw sobie poradziłem po drobnej poprawce:

cat baza.txt | grep -o 'sound[^.]*.mp3' > plik2.txt

Także mam plik plik2.txt z nazwami plików dźwiękowych w postaci nazwa.mp3 (bez żadnych dodatków typu sound czy jakieś inne znaki), oczywiście każdy w osobnej linii.

Ale ze skryptem coś nie wychodzi
#!/bin/bash
#    liczba lini w pliku
aa=$(cat /media/dane/plik2.txt | wc -l)

#    Petla
for i in `seq 1 $aa`
do
        # info
        echo "Linia nr. $i / $aa"

        #  ab=linia z pliku
        ab=$(awk 'NR=='$i /media/dane/plik2.txt)
                 
                 #   kopiowanie
                 cp $ab /media/dane/collection.media /media/dane/sound
 done
Zwraca:
Linia nr. 398 / 1373
cp: nie można wykonać stat na „01764811.mp3”: Nie ma takiego pliku ani katalogu
cp: katalog „/media/dane/collection.media” został pominięty
co jest nieprawdą, bo plik o takiej nazwie jest na liście i w katalogu źródłowym.

A na tą stronę
https://forum.linux.pl/index.php?topic=20990.0
nie mogę wejść bo się pokazuje komunikat:
Cytuj
Połączenie nie jest bezpieczne

Właściciel witryny forum.linux.pl niepoprawnie ją skonfigurował. Program Firefox nie połączył się z nią, aby chronić użytkownika przed kradzieżą informacji.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2092
  • 1709
    • Zobacz profil
Odp: wyszukanie nazw w pliku tekstowym i ich skopiowanie
« Odpowiedź #3 dnia: 2016-06-13, 16:50:48 »
Cytuj
/media/dane/plik2.txt
Jesli potrzebujesz roota zeby zapisać tam plik, to zapisuj do /tmp lub katalogu użytkownika którego aktualnie używasz.
Ze wzgledu że używanie roota do zwykłych celów nie jest zalecane.

Cytuj
                 #   kopiowanie
                 cp $ab /media/dane/collection.media /media/dane/sound
$ab to jest nazwa pliku z twojej listy w plik2.txt

http://www.arturpyszczuk.pl/commands-cp.html

Zamień sobie i sprawdz jak działa
#!/bin/bash
#    liczba lini w pliku
aa=$(cat /media/dane/plik2.txt | wc -l)

#    Petla
for i in `seq 1 $aa`
do
                 #  ab=linia z pliku
                 ab=$(awk 'NR=='$i /media/dane/plik2.txt)

                  # info
                  echo "Linia nr. $i / $aa  -  $ab"

                 #   kopiowanie
                 cp  /media/dane/collection.media/$ab  /media/dane/sound
 done

i zobaczysz przykładowo coś w tym stylu:
Linia nr. 398 / 1373 - 01764811.mp3
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline kenpo

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 198
    • Zobacz profil
Odp: wyszukanie nazw w pliku tekstowym i ich skopiowanie
« Odpowiedź #4 dnia: 2016-06-13, 18:17:07 »
Tym razem udało się bezbłędnie. Zaoszczędziło mi to wiele godzin ręcznej pracy. Bardzo dziękuję za pomoc.