Как мне найти команды / файлы в моем PATH через завершение табуляции с использованием подстановочных знаков?

Помимо жестких ссылок, индексный дескриптор файла гарантированно уникален в пределах одной файловой системы. Перебор файлов .JPG в текущем каталоге и переименование ( mv -ing) с помощью stat для получения inode:

for i in *.JPG; do echo mv -- "$i" "$(stat -c '%i' "$i")"; done

echo выдаст команду mv , которая будет запущена. Удалите echo для фактического действия:

for i in *.JPG; do mv -- "$i" "$(stat -c '%i' "$i")"; done

Кроме того, если вы хотите, чтобы окончательные имена файлов также имели расширение .JPG :

for i in *.JPG; do mv -- "$i" "$(stat -c '%i' "$i").JPG"; done
1
06.08.2017, 02:12
3 ответа

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

IFS=: find_path=(${PATH}) && find "${find_path[@]}" <your_find_params>

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

(IFS=:; set -f; find $PATH <your_find_params>)

Редактировать:Конечно, это не относится к случаю новой строки, встроенной в компонент пути, но кого это волнует... мы живем в реальном мире.:)

1
27.01.2020, 23:18

Будет

ls `echo $PATH | sed s@ @\\ @g | sed s@:@ @g` | grep [string]

выполнить то, что вам нужно, по обоим пунктам? sed s@ @\\ @gследует заменить $PATHзаписей, в которых есть пробелы, читаемым экранированным пробелом, а sed s@:@ @gследует заменить двоеточия, разделяющие $PATHзаписи, обычным пробелом, который позволяет lsиндивидуально отображать содержимое каждого каталога, который можно передать в grep, который распознает поиск по регулярным выражениям, как подстановочные знаки, которые вы хотите использовать. Насколько я могу судить, это работает в родном Bash, но я не уверен, что это сработает в Cygwin's Bash.

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

1
27.01.2020, 23:18

Переключитесь назш . Убедитесь, что ваш .zshrcвключает строку

setopt glob_complete

Наслаждайтесь.

2
27.01.2020, 23:18

Теги

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