Nowe posty

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

Offline kenpo

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 216
    • 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: 2757
  • 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
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline kenpo

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 216
    • 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: 2757
  • 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
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline kenpo

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 216
    • 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.