- 🐧 [Bash советы] Переименование файлов без ввода полного имени дважды в Linux
- Как переименовать файлы без двойного ввода имени на Linux
- Другие способы переименования файлов без ввода полного имени дважды
- Способ 1 – с помощью команды mv
- ⚕ Как прочитать имя файла с пробелами в Linux
- 1) Создание имени файла с пробелами
- 2) Прочитать файл с пробелами в имени файла
- 3) Создание имени каталога с пробелами
- 4) Переход в каталог с пробелами в имени
- 5) Копирование каталога с пробелами в имени этого каталога
- Работа с «плохими» файлами в командной строке в Linux
- В названии файла есть служебный символ bash
- Имя файла начинается с дефиса
- Удаляем по wildcard
- Файлы с управляющим символом в названии
- Удаление файлов с символами utf8
- Перекодировка имени файла
- Автокомплит
- Удаляем файл через меню выбора
- Удаление по номеру inode
- Удаление по hex-коду
- bash вычленить имя файла из полного пути
- Как получить только имя файла с linux ‘find’?
- 6 ответов
🐧 [Bash советы] Переименование файлов без ввода полного имени дважды в Linux
Позвольте мне показать вам пример.
Вот как мы переименовываем файлы с помощью команды mv на Linux.
Приведенная выше команда переименует файл с именем «itisgood1.txt» в «itisgood2.txt».
Как видите, мы вводим имена файлов два раза в приведенной выше команде.
Однако это не обязательно.
Мы можем легко переименовать файлы в Linux с помощью команды mv, не вводя имена файлов два раза, с помощью простой функции BASH.
Как переименовать файлы без двойного ввода имени на Linux
/.bashrc в вашем любимом редакторе:
Добавьте следующие строки в конце файла:
Здесь имя функции bash – mv.
Вы можете выбрать любое другое имя.
Сохраните и закройте файл.
А затем выполните следующую команду, чтобы изменения вступили в силу:
Отныне вы можете указать только оригинальное имя файла и переименовать файл, как показано ниже.
Используйте клавиши со стрелками для перемещения букв или нажмите клавишу Backspace, чтобы удалить все буквы и введите новое имя для файла.
Не только имя файла, вы также можете переименовать расширение файла.
Это буквально похоже на нажатие клавиши F2 и переименование файла в графическом интерфейсе.
Другие способы переименования файлов без ввода полного имени дважды
Есть также несколько других способов переименовать файл без необходимости вводить полное имя два раза.
Способ 1 – с помощью команды mv
Помимо метода функции BASH, здесь есть еще один простой способ переименования файлов с помощью команды mv.
Нам даже не нужна функция BASH.
Используйте следующую однострочную команду для быстрого переименования файла:
Приведенная выше команда скопирует файл с именем itisgood1.txt в itisgood2.txt.
Источник
⚕ Как прочитать имя файла с пробелами в Linux
В Linux не очень часто обрабатывают имя файла с пробелами, но иногда файлы, скопированные или смонтированные из Windows, могут заканчиваться пробелами.
Хотя не рекомендуется иметь имена файлов с пробелами, давайте обсудим, как управлять именем файла с пробелами в системе Linux.
Мы расскажем, как создать, прочитать и скопировать файл с пробелами в имени файла.
1) Создание имени файла с пробелами
Чтобы создать файлы с пробелами в именах, выполните команду, как показано далее:
Например, чтобы создать файл с именем «itisgood docs», используйте следующий синтаксис
Если вы хотите просмотреть такой файл с пробелом в имени файла, используйте тот же принцип включения имен файлов в кавычки.
2) Прочитать файл с пробелами в имени файла
Вы можете использовать команду «cat» или открыть документ, используя текстовый редактор, например, vim, nano или gedit.
Кроме того, вы можете использовать синтаксис ниже:
Давайте добавим текст в файл ‘itisgood docs’
Для просмотра файла выполните команду ниже:
3) Создание имени каталога с пробелами
Для создания имен каталогов с пробелом между ними используйте синтаксис ниже
Обратите внимание на пробел после обратной косой черты
Например, чтобы создать каталог с именем «itisgood files», запустите
4) Переход в каталог с пробелами в имени
Чтобы перейти к каталогу с пробелами в имени, используйте следующий синтаксис
Чтобы перейти в каталог «itisgood files», выполните команду ниже
5) Копирование каталога с пробелами в имени этого каталога
Чтобы скопировать каталог с пробелами в его имени в другое место, используйте синтаксис ниже
Например, чтобы скопировать “itisgood files” в /home/james, выполните:
Надеюсь, что эта статья хорошо объяснила, как управлять файлами и каталогами с пробелами в имени.
Спасибо, что нашли время, чтобы прочитать эту статью и, пожалуйста, оставьте свои комментарии. ?
Источник
Работа с «плохими» файлами в командной строке в Linux
При работе в командной строке администраторы часто сталкиваются с необходимостью что-то сделать с определенным файлом: удалить, переместить, скопировать. При выполнении подобных задач зачастую приходится обращаться к файлам по имени, что может быть затруднительно, поскольку в именах файлов могут встречаться самые разные символы. Даже те, которых нет на клавиатуре. В этом плане работу может облегчить файловый менеджер, в котором файл можно просто выделить и совершить с ним нужное действие. Но для тех, кто привык работать исключительно в командной строке, предлагаются следующие способы.
В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.
Ситуации могут быть разными. В текущей директории могут быть файлы, которые нужно удалить вместе с теми, которые нужно оставить. Имена у них могут быть самыми разными. Причем первые от последних могут отличаться только одним каким-нибудь заковыристым символом.
В названии файла есть служебный символ bash
Самый простой случай. Для удаления файлов, содержащих в своем названии служебные символы вроде пробелов, кавычек, двойных кавычек, звездочек, обратные кавычки и др. можно заэкранировать обратным слешем или использовать одинарные кавычки:
С помощью одинарных кавычек нельзя удалить файл, в названии которого есть одинарная кавычка, даже заэкранировав ее.
С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.
Имя файла начинается с дефиса
Удалить файл, начинающийся с дефиса простым экранированием не получится, и команда rm будет воспринимать дефис, как начало своего аргумента. Решить проблему довольно просто:
Удаляем по wildcard
Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:
Файлы с управляющим символом в названии
В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:
Другим способом удаления таких файлов являяется ввод управляющего символа с клавиатуры. Для этого нужно воспользоваться комбинацией клавиш, которая экранирует следующий введенный символ, тем самым запрещая системе обрабатывать его. Как правило, эта комбинация CTRL+V. Точно убедиться в этом можно с помощью команды stty -a, посмотрев на параметр lnext. Удалим файл, содержащий символ ESC:
Удаление файлов с символами utf8
Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.
Перекодировка имени файла
Подозревая, что имя файла находится в кодировке, отличной от кодировки терминала, мы можем выполнить перекодирование всех файлов в текущей директории. В результате файлы с битой кодировкой будут перекодированы, а файлы с ascii-символами изменений не претерпят. Существенный плюс этого способа – приведение всех файлов в читабельный вид.
Как видно, чтобы осуществить правильное перекодирование нужно знать две кодировки: предполагаемую кодировку файла и кодировку нашего терминала. Наиболее трудно распознать предполагаемую кодировку файла по непонятным символам. Есть замечательная табличка
Также можно воспользоваться сторонними программами, которые попытаются распознать кодировку автоматически. Например, онлайн-декодер Лебедева.
Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.
Автокомплит
В случае, если в директории название требуемого файла начинается уникально, и это название можно однозначно сформировать автокомплитом, то это довольно простой способ удалить файл:
Удаляем файл через меню выбора
Если мы дошли сюда, дело плохо. Попробуем удалить конкретный файл, составив для этого меню выбора. В итоге, все что нам останется сделать – это выбрать нужный пункт меню вместо ввода имени файла. Для этого нам нужно запрограммировать действие, которое будет происходить с файлом или файлами после ввода нами нужных пунктов меню.
Удаление по номеру inode
Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.
Удаление по hex-коду
И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.
Хорошо, все-таки, что на практике такие файлы попадаются нечасто.
Источник
bash вычленить имя файла из полного пути
Всем привет! Есть текстовый файл, вида:
выглядело бы более наглядно с cat в начале
Больше пайпов!
это делается одним грепом
О человечество! Это прекрасно! Всем огромное спасибо, тему можно считать решённой!
правильно! больше, еще больше велосипедов!
расскажи-ка, чем basename не подошел?
закон топикстартера: из 64 предложеных решений будет скрупулёзно выбрано самое вот такое
Это очень юниксвейно, да, на каждый возможный случай — своя утилита. Вот за это я и ненавижу linux. На самом деле лучший вариант из предложенных. Не надо плодить сущности.
На самом деле, я не знаю, что правильнее выбрать, поэтому выбрал то, что мне проще понять. Попробую варианты с седом и бэйснеймом и решу.
Ле. Человек препологающий, что RoR транслируется в js, что-то считает.
т.е. мне действительно интересно
я бы набыдлокодил grep path file | xargs basename
Ни разу не граммарнаци, но 3 ошибки в одном слове, даже для меня пребор. Марш учить уроки, сучка!
сомневаюсь, что он осилит ответить, потому вот:
\K [6] Keep the stuff left of the \K, don’t include it in $&
Ты крут, спасибо
Это очень юниксвейно, да, на каждый возможный случай — своя утилита. Вот за это я и ненавижу linux.
а я ненавижу из-за таких как ты пионеров, которые велосипеды придумывают типа sed ‘s|.*/\([^/]*\)$|\1|’
А sed не отдельная утилита, а встроенная команда bash?
Подсказка: basename входит в coreutils, а sed — отдельный пакет.
Это очень юниксвейно, да, на каждый возможный случай — своя утилита.
Так чё сидишь. Иди проси, чтобы в МС Офис добавили кнопку для определения имени файла. «Один комбайн, чтобы править всеми!»
Ага, а рядом приписывать: «# extracts basename from path»
Источник
Как получить только имя файла с 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), которое дает только самое новое имя файла:
Источник