Skocz do zawartości


 

Zdjęcie

Bash nazwy plików z konkretnej lokalizacji o danym rozszerzeniu

Bash nazwy plików z konkretnej lokalizacji o danym rozszerzeniu

  • Proszę się zalogować aby odpowiedzieć
6 odpowiedzi na ten temat

Bash nazwy plików z konkretnej lokalizacji o danym rozszerzeniu

#1 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 495 postów

Napisany 04 sierpień 2016 - 19:24

Mógłby mi ktoś pomóc zrobić we wspaniałym bashu taką magię jaką jest pobranie listy plików z podanej lokalizacji o konkretnym rozszerzeniu i zapisanie samych nazw do tablicy.

 

Udało mi się wyskrobać coś takiego:

MYARR=()

[...]

for i in "`ls $DIR | grep .cos`"; do
    MYARR+=("$i")
done

i za żadne skarby nie mogę wyciąć z $i końcówki '.cos'.

 

Jakby mi ktoś powiedział, że godzinę czasu spędzę pisząc taką pierdołę to bym go wyśmiał. Zastanawiam się czy nie łatwiej byłoby to napisać w C/C++ lub w moim ulubieńcu pythonie.

 

Próbowałem czegoś takiego do wycięcia końcówki:

tmp="$i"
tmp=${{tmp}%".signed"}

MYARR+=("$tmp")

Ale jakimś cudem działa tylko na drugi (z dwóch) plików.


Edytowany przez Fizyda, 04 sierpień 2016 - 19:25.

  • 0

#2 Gość_Spoofy_*

Gość_Spoofy_*
  • Goście

Napisany 04 sierpień 2016 - 19:28

Wycięte z mojego rndc-helper'a :

  SLAVE_ZONES_LIST=`ls -1 * | sed 's/.signed//g'`
  for zone in $SLAVE_ZONES_LIST; do
    echo $zone
  done

 


  • 0

#3 Pan Kot

Pan Kot

    Mrrr

  • Zbanowani
  • PipPipPipPipPipPipPipPip
  • 2819 postów

Napisany 04 sierpień 2016 - 19:52

Wy to sobie umiecie utrudniać życie :D.

 

find /path/to/gdziestam -type f -name "*.txt" | cut -d '.' -f 1 > wynik.txt

 

Chociaż jak chcesz zrobić wersję reliable gdzie kropka może występować częściej niż raz to powinieneś zrobić:

 

find /path/to/gdziestam -type f -name "*.txt" | rev | cut -d '.' -f 2- | rev > wynik.txt

  • 0

#4 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 495 postów

Napisany 04 sierpień 2016 - 20:42

Dzięki za odpowiedzi, niestety

 

 

Wycięte z mojego rndc-helper'a :

  SLAVE_ZONES_LIST=`ls -1 * | sed 's/.signed//g'`
  for zone in $SLAVE_ZONES_LIST; do
    echo $zone
  done

Nie załatwia sprawy ponieważ mam nazwy wszystkich plików w katalogu

 

 

 

Wy to sobie umiecie utrudniać życie :D.

find /path/to/gdziestam -type f -name "*.txt" | cut -d '.' -f 1 > wynik.txt

Chociaż jak chcesz zrobić wersję reliable gdzie kropka może występować częściej niż raz to powinieneś zrobić:

find /path/to/gdziestam -type f -name "*.txt" | rev | cut -d '.' -f 2- | rev > wynik.txt

 Prawie, problem w tym że mam całą ścieżkę, ja potrzebuję samą nazwę ponieważ jest ona wartością którą muszę użyć w skrypcie. Powiem szczerze nic nie rozumiem z Twojej komendy więc nie wiem czy mój sposób to jest utrudnianie życia :D.


  • 0

#5 hemi

hemi

    Regularny użytkownik

  • Użytkownicy
  • 81 postów
  • Skąd:Elbląg
  • Imię:Marcin
  • Nazwisko:Jaworski

Napisany 04 sierpień 2016 - 21:33

  SLAVE_ZONES_LIST=`ls -1 * | sed 's/.signed//g'`
  for zone in $SLAVE_ZONES_LIST; do
    echo $zone
  done

W tym kodzie w pierwszej linijce zamień '*' na '*.cos'

 

 

find /path/to/gdziestam -type f -name "*.txt" | cut -d '.' -f 1 > wynik.txt
find /path/to/gdziestam -type f -name "*.txt" | rev | cut -d '.' -f 2- | rev > wynik.txt

Tutaj dodaj '-exec basename', czyli:

 

find /path/to/gdziestam -type f -exec basename -name "*.txt" | cut -d '.' -f 1 > wynik.txt

 

find /path/to/gdziestam -type f -exec basename -name "*.txt" | rev | cut -d '.' -f 2- | rev > wynik.txt

 


  • 0

#6 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 495 postów

Napisany 05 sierpień 2016 - 15:46

Udało mi się osiągnąć efekt jaki oczekiwałem do tego w sposób który rozumiem (@Archi ;)), dlatego zostawiam to dla potomnych:

myfiles=($(ls $DIR | grep .ext))

for myfile in "${myfiles[@]}"; do
    filename=(${myfile%.ext})
done

Krótki opis linijka po linijce:
1. Przechwycenie listy plików z podanej lokalizacji w zmiennej DIR i wygrepowanie ich po interesującym rozszerzeniu. Z takich informacji budujemy tablice o nazwie myfiles
3. Pętla (foreach) po każdym elemencie z naszej tablicy
4. Usuwamy przy pomocy manipulation string z końca stringu którym jest cała nazwa naszego pliku najmniejsze dopasowanie dla wyrażenia zapisanego po '%' czyli w naszym przypadku na sztywno wpisane rozszerzenie. Zapamiętujemy nazwę w zmiennej i możemy wykorzystać dalej w pętli.

 

Mam nadzieję że komuś się też przyda i zaoszczędzę mu masę czasu i nerwów ;).


  • 0

#7 likufanele

likufanele

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 234 postów

Napisany 08 sierpień 2016 - 10:10

Widzę, że już sobie poradziłeś... Jakby co to tu jest też trochę info: http://www.cyberciti...loop-over-file/


  • 0





0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników