Znajdź konkretny plik z rozszerzenia z określonego katalogu

0

Chcę znaleźć konkretną nazwę pliku z określonego katalogu.

Nie znam też nazwy pliku w tym konkretnym katalogu. Znam tylko rozszerzenie tego pliku, tj. „.Uploaded”. Więc korzystając z tego .uploaded rozszerzenia chcę znaleźć filemane.

Chcę nazwę pliku wyjściowego bez pełnej ścieżki do konkretnego katalogu, chcę tylko nazwę pliku.

Jak mogę to zrobić?

Prakash V Holkar
źródło
Podaj rzeczywisty przykład. Naprawdę trudno jest zrozumieć, czego chcesz w tej chwili, ale zazwyczaj wystarczający jest przykład, aby wyjaśnić takie zadanie.
Daniel Andersson

Odpowiedzi:

0

Możesz usunąć ścieżkę do pliku przez rev-cut-rev:

ls dir/*.uploaded | rev | cut -d/ -f1 | rev
choroba
źródło
0

Przykładowa struktura katalogów:

$ ls -1 test
a
b.uploaded
c.uploaded
d.uploaded
e

Z find, nadaje się do przesłania do innego polecenia za pomocą xargs:

$ EXT='.uploaded'; find dir -maxdepth 1 -name "*$EXT" -exec basename {} "$EXT" \;
d
b
c

W skrypcie powłoki, używając basenamedo usunięcia katalogu i sufiksu:

$ EXT=".uploaded"; for i in dir/*"$EXT"; do basename -- "$i" "$EXT"; done
b
c
d

W skrypcie powłoki, używając rozszerzenia parametrów:

$ EXT=".uploaded"; for i in dir/*"$EXT"; do i=${i##*/}; printf '%s\n' "${i%$EXT}"; done
b
c
d

Pamiętaj, że możesz trafić kilka plików. Nie zdefiniowałeś, co ma się stać po pliku. Jeśli masz pewność , że pasuje tylko jeden plik, możesz użyć basenamebezpośrednio:

$ rm dir/{b,d}.uploaded
$ basename dir/*.uploaded .uploaded
c

ale to się nie powiedzie, jeśli glob pasuje do wielu plików.

Daniel Andersson
źródło