Как вывести имя файла linux

Как получить только имя файла с linux ‘find’?

Я использую find для всех файлов в каталоге, поэтому я получаю список путей. Однако, мне нужны только имена файлов. то есть я получаю ./dir1/dir2/file.txt и я хочу сделать file.txt

6 ответов

в GNU find можно использовать

Если у вашей находки нет опции-printf, вы также можете использовать basename:

Если вы используете GNU find

или вы можете использовать язык программирования, таких как Ruby(1.9+)

Если вам нравится решение bash (по крайней мере 4)

использовать -execdir , который автоматически закрывает текущий файл в <> , например:

вы также можете использовать $PWD вместо . (в некоторых системах он не будет производить дополнительную точку спереди).

если у вас все еще есть дополнительная точка, в качестве альтернативы вы можете запустить:

на -execdir primary идентичен -exec primary за исключением этой утилиты будет выполняться из каталога, который закрывает текущий файл.

при использовании + вместо ; , потом <> заменяется как много путей, для каждого вызова утилиты. Другими словами, он будет печатать все имена файлов в одной строке.

если вы хотите выполнить какое-либо действие только против имени файла, используя basename может быть жестким.

будет просто эхо basename /my/found/path . Не то, что мы хотим, если мы хотим выполнить с именем файла.

но вы можете тогда xargs выход. например, чтобы убить файлы в dir на основе имен в другом dir:

Я нашел решение (на странице makandracards), которое дает только самое новое имя файла:

Источник

Как получить только имя файла в Linux ‘find’?

Я использую поиск для всех файлов в каталоге, поэтому я получаю список путей. Однако мне нужны только имена файлов. т.е. я получаю ./dir1/dir2/file.txt и хочу получить file.txt

В GNU find вы можете использовать -printf параметр для этого, например:

Если в вашем поиске нет опции -printf, вы также можете использовать basename:

Используйте -execdir который автоматически содержит текущий файл <> , например:

Вы также можете использовать $PWD вместо . (в некоторых системах это не приведет к появлению дополнительной точки спереди).

Если у вас все еще есть лишняя точка, вы можете запустить:

-execdir Первична идентична -exec первичный за исключением того , утилита будет выполнена из каталога, держит текущий файл .

Когда используется + вместо ; , то <> заменяется таким количеством путей, сколько возможно для каждого вызова утилиты. Другими словами, он напечатает все имена файлов в одну строку.

Читайте также:  Windows networks sharing service

Если вы используете GNU найти

Или вы можете использовать язык программирования, такой как Ruby (1.9+)

Если вам нравится решение bash (как минимум 4)

Если вы хотите выполнить какое-либо действие только с именем файла, использовать basename может быть сложно.

будет просто повторять базовое имя /my/found/path . Не то, что мы хотим, если мы хотим выполнить по имени файла.

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

/clang+llvm-3.3/bin/ -type f -exec basename <> \;

На Mac (BSD find ) используйте:

-exec и -execdir медленно, xargs это король.

xargs Параллелизм также помогает.

Как ни странно, я не могу объяснить последний случай xargs без -n1 . Это дает правильный результат, и это самый быстрый ¯\_(ツ)_/¯

( basename принимает только 1 аргумент пути, но xargs отправит их все (на самом деле 5000) без -n1 . не работает на linux и openbsd, только macOS . )

Несколько больших цифр из системы Linux, чтобы увидеть, как это -execdir помогает, но все же намного медленнее, чем параллель xargs :

Честно говоря, basename и dirname решения проще, но вы также можете проверить это:

Как уже отмечали другие, вы можете комбинировать find и basename , но по умолчанию basename программа будет работать только по одному пути за раз, поэтому исполняемый файл придется запускать один раз для каждого пути (используя либо find . -exec или find . | xargs -n 1 ), что потенциально может быть медленным.

Если вы используете -a опцию on basename , то он может принимать несколько имен файлов за один вызов, что означает, что вы можете затем использовать xargs без -n 1 , чтобы сгруппировать пути вместе в гораздо меньшее количество вызовов basename , что должно быть более эффективным.

Здесь я включил -print0 и -0 (который должен использоваться вместе), чтобы справиться с любым пробелом в именах файлов и каталогов.

Вот сравнение времени, между xargs basename -a и xargs -n1 basename версиями. (Для сравнения «похоже на аналогию» время, указанное здесь, указано после первоначального фиктивного запуска, так что они оба выполняются после того, как метаданные файла уже скопированы в кэш ввода / вывода.) Я передал выходные данные в cksum в обоих случаях просто для демонстрации того, что вывод не зависит от используемого метода.

Как вы можете видеть, это действительно намного быстрее, чтобы избежать запуска basename каждый раз.

Источник

Команды Linux для работы с файлами

Чтобы быть профессионалом в использовании терминала Linux, нужно научится управлять файлами через терминал. Это чуть ли не основа всего, включая редактирование конфигурационных файлов, сборку программ, администрирование и множество других вещей. Просмотр содержимого папок, переход между папками, создание и удаление файлов — это необходимая база, для удобной работы в терминале.

В этой статье мы рассмотрим самые часто используемые команды Linux для работы с файлами и каталогами, после их освоения терминал больше не будет казаться таким непонятным и объемлемым. Вот какие команды будут нас сегодня интересовать:

  • ls — список файлов в директории;
  • cd — переход между директориями;
  • rm — удалить файл;
  • rmdir — удалить папку;
  • mv — переместить файл;
  • cp — скопировать файл;
  • mkdir — создать папку;
  • ln — создать ссылку;
  • chmod — изменить права файла;
  • touch — создать пустой файл.
Читайте также:  Как поменять windows aero

А теперь перейдем к подробному рассмотрению всех этих команд.

1. ls — просмотр содержимого папки

Команда ls позволяет вывести список файлов заданной папки, по умолчанию, будет выведен список файлов текущей папки:

Вы можете вывести список файлов из всех подкаталогов рекурсивно, для этого используйте опцию -R:

Чтобы вывести список файлов нужной папки, вы можете передать ее адрес утилите, например, /home:

Чтобы получить больше информации и вывести все имена файлов в виде списка используйте опцию -l:

2. cd — изменить папку

Команда cd позволяет изменить текущую папку на другую. По умолчанию, текущей считается домашняя папка, например, cd Desktop меняет папку на рабочий стол, если вы выполните ее из домашнего каталога:

Вы также можете указать полный путь к папке:

Команда cd .. переходит в папку, которая находится выше на одну в файловой системе:

Вы также можете вернуться в предыдущую рабочую папку:

3. rm — удалить файлы

Команда rm позволяет удалить файл. Будьте очень осторожны с ней, она не будет спрашивать подтверждения:

Например, rm file удалит файл с именем file, который находится в текущей папке. Как и в предыдущих вариантах, вы можете указать полный путь к файлу linux. Например:

Если вы хотите удалить папку, то нужно использовать опцию -r. Она включает рекурсивное удаление всех файлов и папок на всех уровнях вложенности:

rm -r /home/user/photo/

Будьте осторожны, потому что эта команда удаляет файлы безвозвратно.

4. rmdir — удалить папку

Команда rmdir позволяет удалить пустую папку. Например, команда rmdir directory удалит папку directory, которая находится в текущей папке:

Если вам нужно удалить папку с файлами, то нужно использовать утилиту rm вместе с опцией -r.

5. mv — перемещение файлов

Команда mv перемещает файл в новое место. Она также может использоваться для переименования файлов. Например, mv file newfile переименует файл file в newfile:

mv file newfile

Чтобы переместить файл в другую папку нужно указать путь к ней, например, переместим файл file в папку /home/user/tmp/

mv file /home/user/tmp/

6. cp — копирование файлов

Эта cp и mv — это похожие команды linux для работы с файлами. Они работают аналогичным образом, только исходный файл остается на своем месте.

cp file newfile

Вы также можете рекурсивно скопировать всю папку с помощью команды cp -r. Эта команда скопирует всю папку вместе со всеми файлами и вложенными папками в новое место. Например, скопируем папку /etc/:

cp -r /etc /etc_back

7. mkdir — создать папку

Команда mkdir позволяет создать новую папку mkdir test создаст папку в текущем каталоге:

Если нужно создать папку в другом каталоге, укажите полный путь к нему:

8. ln — создание ссылок

Утилита ln позволяет создавать жесткие и символические ссылки на файлы или папки. Для создания символической ссылки используется опция -s. Например, вы создадим ссылку на папку с загрузками:

ln -s /home/user/Downloads/ /home/user/test/

Для создания жесткой ссылки никаких опций задавать не нужно:

ln /home/user/Downloads/ /home/user/test/

9. chmod — изменить права

chmod позволяет изменить права доступа к файлам. Например, chmod +x script.sh добавляет флаг исполняемости к файлу script.sh:

Читайте также:  What is default route in linux

chmod +x script.sh

Чтобы убрать флаг исполняемый используйте опцию -x:

chmod -x script.sh

Подробнее о том, как работают разрешения для файлов смотрите в статье права доступа к файлам в Linux.

10. touch — создать файл

Команда touch создает пустой файл. Например, touch file создаст пустой файл в текущей папке с именем file:

Для создания файлов через терминал существует еще несколько команд, они рассмотрены в статье как создать файл в linux.

11. mc

Работа с файлами Linux через терминал может выполняться не только с помощью обычных консольных команд, каждая из которых выполняет только определенное действие. Вы можете использовать полнофункциональный файловый менеджер с псевдографическим интерфейсом на основе ncurses. Midnight Commander — это файловый менеджер, который можно использовать прямо в терминале. Для установки mc в Ubuntu выполните:

sudo apt install mc

После завершения установки достаточно выполнить команду mc:

Используйте клавиши со стрелками для перемещения по файлах, Tab для перехода на другую панель, Alt+1 для просмотра справки и Alt+2 для вывода меню:

Если терминальное окружение поддерживает мышь, то вы можете ее использовать в Midnight Commander.

Выводы

В этой статье мы рассмотрели как выполняется работа с файлами и каталогами в linux, с помощью терминала. Когда вы освоите все эти команды, вы сможете сделать большинство основных действий в терминале. А как часто вы пользуетесь терминалом? Используете его для работы с файлами? Напишите в комментариях!

Источник

Показать имена всех файлов в директории Bash Script

Введение

Перед тем как читать эту статью убедитесь, что вы знакомы с содержанием статьи «Основы Bash»

Показать имена всех файлов в директории

#!/bin/bash for file in ./**; do echo » $ » done

Показать файлы с определёныым расширением

Если нужны только файлы с расширением .jpg

#!/bin/bash for file in ./**.jpg; do echo » $ » done

Получить имя файла без расширения

Если нужно только имя файла без расширения

#!/bin/bash for file in ./**.jpg; do filename= » $ » echo $filename done

Получить только расширение файла

Если нужно только расширение

#!/bin/bash for file in ./**.jpg; do extension=»$» echo $EXT ension done

Преобразовать изображения в формат .webp

wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.2.0-linux-x86-64.tar.gz
mkdir webp
cp libwebp-1.2.0-linux-x86-64.tar.gz webp/
tar -xvf libwebp-1.2.0-linux-x86-64.tar.gz
cp -r libwebp-1.2.0-linux-x86-64 libwebp-current
cd libwep-current/bin
pwd
vi

#!/bin/bash for file in ./**.jpg; do filename= » $ » newfile= $filename «.webp» cwebp -q 60 $file -o $newfile done

Добавить к названиям файлов суффикс

Если нужно сохранить расширение файла, а к оригинальному названию добавить какое-то слово или символ. А сделать это со всеми файлами данного типа в директории

Например в директории есть файлы a.jpg , b.jpg , c.jpg , а нужно сделать из них a—small.jpg , b—small.jpg , c—small.jpg

#!/bin/bash POSTFIX=»—small» # что вы хотите добавить EXT=».jpg» # к каким файлам for file in ./** $EXT ; do fullname= » $ » filename= » $ » temp= $filename $POSTFIX mv $file $$EXT done

А теперь скрипт, который делает и то и другое, а перед тем как делать проверяет нет ли уже такого файла

Источник

Оцените статью