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ć?


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.