Сколько файлов с расширением txt содержится в подкаталогах каталога prose

Обновлено: 21.11.2024

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

Я получаю эту ошибку:

15 ответов 15

*.txt — это шаблон подстановки, в котором * используется в качестве подстановочного знака для соответствия любой строке. *.txt соответствует всем именам файлов, оканчивающимся на '.txt'.

-- отмечает конец списка опций. Это позволяет избежать проблем с именами файлов, начинающимися с дефиса.

$ – это расширение параметра, замененное значением переменной f с удаленным в конце расширением .txt.

Также см. статью о том, почему не следует анализировать ls .

Если вам нужно использовать basename , ваш синтаксис будет таким:

Вот как я могу изменить все расширения файлов в текущем каталоге в Debian.

В MacOS пользователь Monkpit сообщает, что ему удалось использовать brew install rename, чтобы заставить это работать.

с помощью fish shell вы можете переименовать "s/oldExtension/newExtension/" **.txt, чтобы рекурсивно переименовать все *.txt

Это был бы идеальный ответ, а не выбранный лучший ответ. В любом случае, обратите внимание, что разные дистрибутивы Linux имеют разные реализации rename ; например OpenSuse использует util-linux.rename и не будет работать с регулярными выражениями (блин... 😒), поэтому не идеально подходит для переименования расширений файлов.

Простая команда rename from util-linux сделает это за вас, она заменит все вхождения "txt" на "text" во всех файлах, соответствующих "*.txt":

rename изменяет первое вхождение, поэтому лучше сделать это переименование .txt .text , но это все равно не всегда будет работать (например, foo.txtx.bar.txt переименовывается в foo.textx.bar.txt ).

Следует отметить, что не все системы имеют одинаковую версию переименования; в Debian и его друзьях команда rename на самом деле является perl-rename и использует регулярные выражения Perl. Для этого эквивалентной командой будет: переименовать 's/.txt/.text/' *.txt . Люди должны проверить переименование человека в своей системе, чтобы узнать, какое у них есть.

Выше работает нормально, но ограничено текущим каталогом. Попробуйте приведенную ниже команду, которая гибка с подкаталогами. Он переименует все файлы .txt в структуре каталогов с новым расширением.

rename может обрабатывать несколько файлов в качестве аргумента, вы можете значительно ускорить процесс, используя + вместо \; если таких файлов много

Тем не менее, это полезная опция, поскольку "*.txt" может разворачиваться в большой список аргументов, не поддерживаемый оболочкой.

Ответы, ссылающиеся на s/oldExtension/newExtension/, неверны. Если вы используете s/txt/text/ , вы должны преобразовать footxt.txt в footext.txt , а это не то, что вам нужно. Даже если вы используете s/.txt/.text/ , это преобразует footxt.txt в fo.text.txt .

Вы должны использовать \. для соответствия периоду ( . будет соответствовать любому символу). И завершающий $, чтобы соответствовать концу строки. Только это будет правильно соответствовать расширению.

Для Mac мне нужно запустить эту команду "autoload -U zmv". В противном случае я получаю «zsh: команда не найдена: zmv»

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

Я получаю следующую команду:

Он подсчитывает все файлы в определенном каталоге, но мне нужно подсчитать файлы, которые заканчиваются расширением .mp4.

Есть ли для этого какая-либо команда Ubuntu?

Простой, правильный и прямой ответ — это ответ @louis-matthijssen. ls -1 обработка символов новой строки делает в этом случае разумным анализ вывода ls. Отмеченный неверен для использования флага -R.

10 ответов 10

К сожалению, эту несерьезную проблему трудно решить способом, поддерживающим все имена файлов и переносимым. Это безопасно (обрабатывает скрытые файлы, пути, содержащие пробелы, дефисы и даже новые строки) и совместимо с POSIX:

Если вы не хотите, чтобы он был рекурсивным, просто добавьте -maxdepth 1 .

Или другие предложения:

Хотя этот ответ правильный и надежный, вы можете использовать -printf x вместо -exec printf x \; . То есть: find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c Нет необходимости выполнять -exec внешнюю команду printf, которая при наличии большого количества файлов будет очень медленной, потому что find должна создать fork(2) свою копию, а затем выполнить execve(2 ) /usr/bin/printf . С -exec printf x \; , это необходимо сделать один раз для каждого файла.

Найти BSD содержит -mindepth и -maxdepth, но не содержит -printf, поэтому я ценю включение обоих.

Здесь вы можете сделать это

Это дает вам возможность считать

Почему -R? Зачем делать полную статистику, когда вам просто нужно имя файла? Почему бы не ls -1 *.jpg| туалет -л ? (хорошо, не работает, если у вас есть имена файлов с символами новой строки. В этом случае вы это заслужили ;-) . )

<р>. и вопрос был «подсчет количества файлов в каталоге». Более того, это будет рекурсивно перечислять все содержимое подкаталогов, имя которых заканчивается на .jpg, а не файлы в подкаталогах, оканчивающихся на .jpg .Вы когда-нибудь проверяли это?

В вопросе указано "файлы в определенном каталоге", что означает, что рекурсия в подкаталоге нежелательна.

Это также не работает, если в каталоге слишком много файлов (поскольку *.jpg расширяется оболочкой, а не ls ) и если есть файлы, имена которых начинаются с дефисов.

@DavidRicherby Пропускаются имена, начинающиеся с . . Но на самом деле это нормально работает с дефисами в именах, за исключением случаев, когда /path/to/dir является пустой строкой или относительным путем, начинающимся с дефиса. Но раньше я ошибался, говоря, что ls заменяет символы на ? . Это происходит, когда stdout является терминалом, но здесь вывод представляет собой канал, поэтому ls отправляет все символы из имен файлов в wc. Это делает этот ответ неверным без флага -q или -b для изменения этого поведения, потому что имена файлов могут содержать символы новой строки. Ответ l0b0 свободен от этих проблем.

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

Возвращает имена файлов, соответствующих заданным критериям.

Перегрузки

Возвращает имена файлов (включая их пути) в указанном каталоге.

Возвращает имена файлов (включая их пути), которые соответствуют указанному шаблону поиска в указанном каталоге.

Возвращает имена файлов (включая их пути), которые соответствуют указанному шаблону поиска и параметрам перечисления в указанном каталоге.

Возвращает имена файлов (включая их пути), которые соответствуют указанному шаблону поиска в указанном каталоге, используя значение для определения необходимости поиска в подкаталогах.

Получить файлы(строка)

Возвращает имена файлов (включая их пути) в указанном каталоге.

Параметры

Относительный или абсолютный путь к каталогу для поиска. В этой строке не учитывается регистр.

Возврат

Массив полных имен (включая пути) файлов в указанном каталоге или пустой массив, если файлы не найдены.

Исключения

путь — это имя файла.

Произошла ошибка сети.

У вызывающего абонента нет необходимого разрешения.

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

Указанный путь не найден или недействителен (например, он находится на несопоставленном диске).

Примеры

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

Примечания

Методы EnumerateFiles и GetFiles различаются следующим образом: при использовании EnumerateFiles можно начать перечисление коллекции имен до того, как будет возвращена вся коллекция; когда вы используете GetFiles, вы должны дождаться возврата всего массива имен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете с большим количеством файлов и каталогов, EnumerateFiles может быть более эффективным.

Имена возвращаемых файлов добавляются к указанному параметру пути.

Этот метод идентичен GetFiles(String, String) со звездочкой (*), указанной в качестве шаблона поиска.

Параметр пути может указывать относительный или абсолютный путь. Информация об относительном пути интерпретируется как относительная к текущему рабочему каталогу. Чтобы получить текущий рабочий каталог, см. GetCurrentDirectory.

Порядок возвращаемых имен файлов не гарантируется; используйте метод Sort, если требуется определенный порядок сортировки.

Параметр пути не чувствителен к регистру.

Список общих задач ввода-вывода см. в разделе Общие задачи ввода-вывода.

См. также

Относится к

Получить файлы(строка, строка)

Возвращает имена файлов (включая их пути), которые соответствуют указанному шаблону поиска в указанном каталоге.

Параметры

Относительный или абсолютный путь к каталогу для поиска. В этой строке не учитывается регистр.

Строка поиска для сопоставления с именами файлов в пути . Этот параметр может содержать комбинацию допустимого прямого пути и подстановочных знаков (* и ?), но не поддерживает регулярные выражения.

Возврат

Массив полных имен (включая пути) файлов в указанном каталоге, соответствующих заданному шаблону поиска, или пустой массив, если файлы не найдены.

Исключения

путь — это имя файла.

Произошла ошибка сети.

У вызывающего абонента нет необходимого разрешения.

searchPattern не содержит допустимого шаблона.

path или searchPattern имеет значение null .

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

Указанный путь не найден или недействителен (например, он находится на несопоставленном диске).

Примеры

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

Примечания

Возвращаемые имена файлов добавляются к указанному параметру пути, и порядок возвращаемых имен файлов не гарантируется; используйте метод Sort, если требуется определенный порядок сортировки.

searchPattern может быть комбинацией буквенных и подстановочных знаков, но не поддерживает регулярные выражения. В searchPattern разрешены следующие подстановочные знаки.

Подстановочный знак Соответствия
* (звездочка) Ноль или более символов в этой позиции.
? (вопросительный знак) Ноль или один символ в этой позиции.

Символы, кроме подстановочных знаков, являются буквальными символами. Например, строка searchPattern "*t" ищет все имена в пути, оканчивающемся на букву "t". Строка searchPattern "s*" ищет все имена в пути, начинающемся с буквы "s".

searchPattern не может заканчиваться двумя точками ("..") или содержать две точки (".."), за которыми следует DirectorySeparatorChar или AltDirectorySeparatorChar, а также не может содержать недопустимых символов. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars.

При использовании подстановочного знака звездочки в шаблоне поиска, таком как "*.txt", количество символов в указанном расширении влияет на поиск следующим образом:

  • Если указанное расширение состоит ровно из трех символов, метод возвращает файлы с расширениями, начинающимися с указанного расширения. Например, "*.xls" возвращает как "book.xls", так и "book.xlsx".
  • Во всех остальных случаях метод возвращает файлы, точно соответствующие указанному расширению. Например, "*.ai" возвращает "file.ai", но не "file.aif".

При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, соответствующие указанному расширению файла. Например, при наличии двух файлов, "file1.txt" и "file1.txtother", в каталоге, шаблон поиска "file?.txt" возвращает только первый файл, тогда как шаблон поиска "file*.txt" возвращает оба файла.

Поскольку этот метод проверяет имена файлов как в формате имени файла 8.3, так и в формате длинного имени файла, шаблон поиска, аналогичный "*1*.txt", может возвращать неожиданные имена файлов. Например, при использовании шаблона поиска "*1*.txt" возвращается "longfilename.txt", поскольку эквивалентным форматом имени файла версии 8.3 является "LONGFI~1.TXT".

Методы EnumerateFiles и GetFiles различаются следующим образом: при использовании EnumerateFiles можно начать перечисление коллекции имен до того, как будет возвращена вся коллекция; когда вы используете GetFiles, вы должны дождаться возврата всего массива имен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете с большим количеством файлов и каталогов, EnumerateFiles может быть более эффективным.

Параметр пути может указывать относительный или абсолютный путь. Информация об относительном пути интерпретируется как относительная к текущему рабочему каталогу. Чтобы получить текущий рабочий каталог, см. GetCurrentDirectory.

Отображает список файлов и подкаталогов каталога. При использовании без параметров эта команда отображает метку тома и серийный номер диска, а затем список каталогов и файлов на диске (включая их имена, а также дату и время последнего изменения каждого из них). Для файлов эта команда отображает расширение имени и размер в байтах. Эта команда также отображает общее количество перечисленных файлов и каталогов, их совокупный размер и свободное место (в байтах), оставшееся на диске.

Команду dir также можно запустить из консоли восстановления Windows с другими параметрами. Дополнительные сведения см. в разделе Среда восстановления Windows (WinRE).

Синтаксис

Параметры

  • d – Каталоги
  • h — Скрытые файлы
  • s — Системные файлы
  • l — Точки повторной обработки
  • r — файлы только для чтения
  • a — Файлы готовы к архивированию
  • i — Файлы, не проиндексированные по содержимому
  • n — в алфавитном порядке по имени
  • e – в алфавитном порядке.
  • g – сначала сгруппировать каталоги
  • s – по размеру, начиная с самого маленького.
  • d — по дате/времени, начиная с самых старых
  • Используйте префикс -, чтобы изменить порядок сортировки
  • c — Создание
  • a — Последнее обращение
  • w – Последнее сообщение

Примечания

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

Вы можете использовать подстановочные знаки (* или ?) для представления одного или нескольких символов имени файла и для отображения подмножества файлов или подкаталогов.

Вы можете использовать подстановочный знак * для замены любой строки символов, например:

dir *.txt содержит список всех файлов в текущем каталоге с расширениями, начинающимися с .txt, например .txt, .txt1, .txt_old.

dir read *.txt перечисляет все файлы в текущем каталоге, имена которых начинаются с read и расширения которых начинаются с .txt, например .txt, .txt1 или .txt_old.

dir read *.* перечисляет все файлы в текущем каталоге, которые начинаются с read с любым расширением.

Подстановочный знак звездочки всегда использует сопоставление коротких имен файлов, поэтому вы можете получить неожиданные результаты. Например, следующий каталог содержит два файла (t.txt2 и t97.txt):

Вы можете ожидать, что при вводе dir t97\* будет возвращен файл t97.txt. Однако если ввести dir t97\*, будут возвращены оба файла, поскольку подстановочный знак звездочки сопоставляет файл t.txt2 с t97.txt, используя его карту коротких имен T97B4~1.TXT. Аналогично, если ввести del t97\*, то оба файла будут удалены.

Можно использовать вопросительный знак (?) вместо одного символа в имени. Например, набрав dir read. txt перечисляет все файлы в текущем каталоге с расширением .txt, которые начинаются с чтения и за которыми следует до трех символов. Сюда входят файлы Read.txt, Read1.txt, Read12.txt, Read123.txt и Readme1.txt, но не файлы Readme12.txt.

Если вы используете /a с более чем одним значением в атрибутах, эта команда отображает имена только тех файлов со всеми указанными атрибутами. Например, если вы используете /a с r и -h в качестве атрибутов (используя либо /a:rh, либо /ar-h ), эта команда отобразит только имена файлов только для чтения, которые не скрыты.< /p>

Если вы укажете более одного значения sortorder, эта команда сортирует имена файлов по первому критерию, затем по второму критерию и так далее. Например, если вы используете /o с параметрами e и -s для порядка сортировки (используя либо /o:es, либо /oe-s ), эта команда сортирует имена каталогов и файлов по расширению. , начиная с наибольшего, а затем отображает окончательный результат. Алфавитная сортировка по расширению приводит к тому, что сначала отображаются имена файлов без расширений, затем имена каталогов, а затем имена файлов с расширениями.

Если вы используете символ перенаправления ( > ) для отправки вывода этой команды в файл или если вы используете канал ( | ) для отправки вывода этой команды другой команде, вы должны использовать /a:-d и /b только список имен файлов. Вы можете использовать имя файла с параметрами /b и /s, чтобы указать, что эта команда предназначена для поиска в текущем каталоге и его подкаталогах всех имен файлов, которые соответствуют имя файла. Эта команда выводит только букву диска, имя каталога, имя файла и расширение имени файла (по одному пути в строке) для каждого найденного имени файла. Прежде чем использовать конвейер для отправки вывода этой команды другой команде, необходимо установить переменную среды TEMP в файле Autoexec.nt.

Примеры

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

В выходных данных перечислены корневой каталог, подкаталоги и файлы в корневом каталоге, включая расширения. Эта команда также выводит список имен подкаталогов и имен файлов в каждом подкаталоге дерева.

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

Чтобы распечатать список каталогов, введите:

Когда вы указываете prn, список каталогов отправляется на принтер, подключенный к порту LPT1. Если ваш принтер подключен к другому порту, вы должны заменить prn именем правильного порта.

Вы также можете перенаправить вывод команды dir в файл, заменив prn именем файла. Вы также можете ввести путь. Например, чтобы направить вывод каталога в файл dir.doc в каталоге Records, введите:

Если каталог dir.doc не существует, каталог dir создает его, если только каталог Records не существует. В этом случае появится следующее сообщение:

Чтобы отобразить список всех имен файлов с расширением .txt во всех каталогах на диске C, введите:

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

Читайте также: