Найти командную строку для каждого файла
Я обнаружил, что команда "найти" намного быстрее, чем "Spotlight" в Mac OS X. Я скорее визуализирую результаты с помощью автоматизатора, но не повезло, поэтому я надеюсь, что фанаты из SU помогут с решением по этому поводу.
поисковая фраза shellscript.sh выполняет:
создать папку на рабочем столе "Результаты", если не существует
удалить все в этой папке (свежие результаты)
foreach результат создать симлинк
благодарю вас
2 ответа
Вот версия с несколькими улучшениями.
Не включайте ваше имя пользователя в сценарий, используйте
~
сослаться на ваш домашний каталог.Сохраните имя каталога результатов в переменной. Это показывает, как использовать переменную в сценарии оболочки.
Сделайте деталь, которая удаляет результат предыдущего поиска, более надежной: она не удалит ничего, кроме символической ссылки.
Самое главное: ваша версия не будет работать с именами файлов, содержащими пробелы или некоторые специальные символы, потому что оболочка выполняет некоторый повторный анализ результата
$(...)
а также$file
, Вы всегда должны ставить подстановки переменных в двойных кавычках (т.е. писать"$file"
). Моя версия корректно работает со всеми именами файлов (за исключением случаев, когда они содержат символы новой строки, но это неизбежно приlocate
).
#!/bin/bash
results_dir=~/Desktop/results
mkdir -p "$results_dir"
find "$results_dir" -type l -exec rm {} +
echo "Please enter some input: "
read -r input_variable
locate "$input_variable" | while read -r line; do
ln -s "$line" "$results_dir/"
done
Мой прогресс:
#!/bin/bash
rm -rf /Users/arpecop/Desktop/results/
mkdir /Users/arpecop/Desktop/results/
echo "Please enter some input: "
read input_variable
for file in $(locate "$input_variable")
do
ln -s $file /Users/arpecop/Desktop/results/
done