'ls -1': как вывести список имен файлов без расширения

'ls -1': как вывести список имен файлов без расширения

ls -1перечисляет мои элементы следующим образом:

foo.png
bar.png
foobar.png
...

Я хочу, чтобы это было указано без .pngподобных вещей:

foo
bar
foobar
...

(каталог содержит только .pngфайлы)

Может кто-нибудь подскажет, как пользоваться grepв этом случае?

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

решение1

ls -1 | sed -e 's/\.png$//'

Команда sedудаляет (то есть заменяет пустой строкой) любую строку, .pngнайденную вконецимени файла.

The .экранируется как \., так что он интерпретируется sedкак буквальный .символ, а не как регулярное выражение .(что означает соответствие любому символу). The $— это якорь конца строки, поэтому он не соответствует .pngсередине имени файла.

решение2

Для этой работы вам понадобится только оболочка.

POSIXly:

for f in *.png; do
    printf '%s\n' "${f%.png}"
done

С zsh:

print -rl -- *.png(:r)

решение3

Если вы просто хотите использовать bash:

for i in *; do echo "${i%.png}"; done

grepПри поиске совпадений следует использовать не удаление/замену, а sedследующее:

find . -maxdepth 1 -name "*.png"  | sed 's/\.png$//'

Как только вы решите, что вам нужно создать несколько подкаталогов, чтобы навести порядок в ваших PNG-файлах, вы можете легко изменить это следующим образом:

find . -name "*.png"  | sed 's/\.png$//'

решение4

Еще один очень похожий ответ (удивительно, что этот конкретный вариант еще не появился):

ls | sed -n 's/\.png$//p'
  • Вам не нужна опция -1, lsтак как lsпредполагается, что стандартный вывод не является терминалом (в данном случае это канал).
  • опция -nозначает sed«не печатать строку по умолчанию»
  • опция /pв конце подстановки означает «...и вывести эту строку, если была сделана подстановка».

Чистый эффект этого заключается в том, чтобы распечатать только те строки, которые заканчиваются на .png, с .pngудаленным. То есть, это также удовлетворяет небольшому обобщению вопроса OP, где каталог содержит не только .pngфайлы.

Этот sed -nметод часто полезен в случаях, когда в противном случае вы могли бы использовать grep+sed.

Связанный контент