Найдите имена файлов, которые не содержат указанную строку

Если можно использовать Compiz, существует эта вещь под названием Сетка (если я помню имя правильно). Я не уверен, имеет ли xfwm что-то вроде этого, Вы могли бы проверить его.

Также я настоятельно рекомендовал бы испытать различные парадигмы WM, если они могли бы больше соответствовать, т.е. не опускают размещать WMs рядом просто, потому что они не распространены.

Если Вы настаиваете на способности разместить окна рядом, не изменяя Ваш WM, существуют отдельные (сторонние) утилиты, чтобы сделать это. Один список в Википедии: https://en.wikipedia.org/wiki/Tiling_window_manager#Third_party_tiling_applications_on_Xorg

20
26.11.2013, 19:19
3 ответа

Просто:

find . ! -name '*2013*'

Добавьте a ! -type d также исключить файлы каталога типа (как . самостоятельно), или -type f включать только регулярные файлы, исключая все другие типы файлов (каталоги, fifos, символьные ссылки, устройства, снабжают сокетом...).

Остерегайтесь однако этого * соответствует последовательности 0 или больше символов. Таким образом, это могло сообщить об именах файлов, которые содержат 2013 если это 2013 предшествовался или сопровождался чем-то, что не может полностью декодироваться как допустимые символы в текущей локали.

Это может произойти, если Вы находитесь в локали, где символы могут быть закодированы больше чем на одном байте (как в UTF-8) для имен файлов, которые кодируются в другом кодировании. Например, в локали UTF-8, это было бы отчет a Stéphane2013 файл, если это é был закодирован в iso8859-15 наборе символов (как 0xe9 байт).

Лучше всего должен был бы удостовериться, что имена файлов кодируются в наборе символов локали, но если Вы не можете гарантировать это, работа вокруг должна работать find в локали C:

LC_ALL=C find . ! -name '*2013*'
29
27.01.2020, 19:44

Шаблоны имени файла Ksh достаточны:

# files with 2013
ls -d -- *2013*

# files without 2013
ls -d -- !(*2013*)

Ссылка

Если Ваша оболочка является ударом, необходимо работать shopt -s extglob прежде чем можно будет использовать этот шаблон (можно вставить его Ваш .bashrc). Если Ваша оболочка является zsh, необходимо работать setopt ksh_glob (можно вставить его Ваш .zshrc). Zsh также предлагает ls -d -- ^*2013*, который требует предварительного мероприятия setopt extended_glob.

В зависимости от того, что Вы делаете с этими именами файлов, ls может не быть правильная команда для использования. Сохранить их в массиве

filenames=( !(*2013*) )
for f in "${filenames[@]}"; do ...; done
4
27.01.2020, 19:44
  • 1
    Это не рекурсивно вызывает в подкаталогах и пропустит точечные файлы хотя (и ls возвратит сообщение об ошибке, если шаблон не будет соответствовать никакому файлу). Также отметьте это ksh отсортирует список. –  Stéphane Chazelas 26.11.2013, 13:54

Найти все файлы в текущем каталоге, которые не содержат определенной строки, здесь «2013»:

find . ! -name "*2013*" -type f
-1
27.01.2020, 19:44

Теги

Похожие вопросы