Я хочу найти конкретное имя файла из определенного каталога.

Также я не знаю имя файла в этом конкретном каталоге. Я знаю только расширение этого файла, т.е. ".uploaded". Поэтому, используя это расширение .uploaded, я хочу найти файл-файл.

Я хочу, чтобы имя файла в выходных данных без полного пути до определенного каталога, я просто хочу имя файла.

Так как я могу это сделать?

2 ответа2

0

Вы можете удалить путь к файлу с помощью rev-cut-rev:

ls dir/*.uploaded | rev | cut -d/ -f1 | rev
0

Пример структуры каталогов:

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

С помощью команды find , подходящей для передачи другой команде через xargs:

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

В сценарии оболочки, используя basename для удаления каталога и суффикса:

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

В сценарии оболочки, используя расширение параметров:

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

Обратите внимание, что вы можете нажать несколько файлов. Вы не определили, что вы хотите, чтобы произошло после файла. Если вы уверены, что есть только один файл, который будет соответствовать, вы можете использовать basename напрямую:

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

но это не удастся, если глобус совпадает с несколькими файлами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .