Одиночные кавычки включают значение, которое должно быть принято буквально: все типы расширений подавляются. Обычно используется, если значение включает или может включать в себя пробел (пробел, табуляцию, новую строку) или специальные символы ($, \, `), которые пользователь не хочет развернуть или обработать оболочка.
Двойные кавычки включают значение, которое будет иметь переменные, и замену символов. Требуется, когда вывод может содержать пробелы и должен быть назначен как одно значение.
Обратные кавычки заключают в себе команду, результаты которой требуются как значение. Новые оболочки позволяют использовать $(...) вместо `...`. Я предпочитаю новый метод.
Следующий код может помочь понять, что происходит.
CMD='ls .' echo sq: $CMD set $CMD echo raw 1: $1 echo raw: $* set "$CMD" echo dq: $1 echo bq: `$CMD` echo new: $($CMD)Я думаю, что самый простой способ - использовать:
find . -name "??????????*"
, где число ? символов равно n. Просто потому, что трудно забыть
Но самый хороший способ заключается в использовании опции -regex, чтобы найти имена файлов с n или больше символов. :
find . -regextype posix-egrep -regex ".*[^/]{n}"
где n должно быть натуральным числом (минимальная длина имени файла).
См. man find больше о.
Вы можете перебрать список файлов, возвращаемых функцией find, и проверить длину имени файла:
min_fname() {
for path in $(find "$1" -type f); do
bn="${path##*/}"
if (( "${#bn}" >= $2 )); then
echo "$path"
fi
done
}
# usage: min_fname dir value
$ min_fname /tmp 5
$ min_fname /home/user 10
Эта функция использует только встроенные механизмы find и Bash, а regex соответствия. Поместите это определение функции в файл ~/.bashrc, чтобы команда min_fname сохранялась между входами.
Подход Python:
#!/usr/bin/env python
from __future__ import print_function
import os,sys
def main():
treeroot = sys.argv[1]
base_len = int(sys.argv[2])
for dir,subdirs,files in os.walk(treeroot):
for f in files:
if len(f) >= base_len:
fullpath = os.path.abspath(os.path.join(dir,f))
print(fullpath)
if __name__ == '__main__' : main()
Использование прост:
./find_files_len.py /path/to/top_directory/ minimal_length
Например:
./find_files_len.py /etc 5
Это даст нам все файлы с базовым именем не менее 5 символов, найденным рекурсивно через /etc/ и все его подкаталоги. Обратите внимание, что полный путь к файлу будет напечатан в командной строке
Вы можете перебрать список файлов, возвращаемых функцией find, и проверить длину имени файла:
min_fname() {
for path in $(find "$1" -type f); do
bn="${path##*/}"
if (( "${#bn}" >= $2 )); then
echo "$path"
fi
done
}
# usage: min_fname dir value
$ min_fname /tmp 5
$ min_fname /home/user 10
Эта функция использует только встроенные механизмы find и Bash, а regex соответствия. Поместите это определение функции в файл ~/.bashrc, чтобы команда min_fname сохранялась между входами.
Вы можете перебрать список файлов, возвращаемых функцией find, и проверить длину имени файла:
min_fname() {
for path in $(find "$1" -type f); do
bn="${path##*/}"
if (( "${#bn}" >= $2 )); then
echo "$path"
fi
done
}
# usage: min_fname dir value
$ min_fname /tmp 5
$ min_fname /home/user 10
Эта функция использует только встроенные механизмы find и Bash, а regex соответствия. Поместите это определение функции в файл ~/.bashrc, чтобы команда min_fname сохранялась между входами.
Вы можете перебрать список файлов, возвращаемых функцией find, и проверить длину имени файла:
min_fname() {
for path in $(find "$1" -type f); do
bn="${path##*/}"
if (( "${#bn}" >= $2 )); then
echo "$path"
fi
done
}
# usage: min_fname dir value
$ min_fname /tmp 5
$ min_fname /home/user 10
Эта функция использует только встроенные механизмы find и Bash, а regex соответствия. Поместите это определение функции в файл ~/.bashrc, чтобы команда min_fname сохранялась между входами.
Вы можете перебрать список файлов, возвращаемых функцией find, и проверить длину имени файла:
min_fname() {
for path in $(find "$1" -type f); do
bn="${path##*/}"
if (( "${#bn}" >= $2 )); then
echo "$path"
fi
done
}
# usage: min_fname dir value
$ min_fname /tmp 5
$ min_fname /home/user 10
Эта функция использует только встроенные механизмы find и Bash, а regex соответствия. Поместите это определение функции в файл ~/.bashrc, чтобы команда min_fname сохранялась между входами.
Вы можете перебрать список файлов, возвращаемых функцией find, и проверить длину имени файла:
min_fname() {
for path in $(find "$1" -type f); do
bn="${path##*/}"
if (( "${#bn}" >= $2 )); then
echo "$path"
fi
done
}
# usage: min_fname dir value
$ min_fname /tmp 5
$ min_fname /home/user 10
Эта функция использует только встроенные механизмы find и Bash, а regex соответствия. Поместите это определение функции в файл ~/.bashrc, чтобы команда min_fname сохранялась между входами.