Команда поиска: имя в списке

Не знаю, будет ли это работать в Fedora, но в моей Ubuntu я мог добиться этого, просто отредактировав бин для skypeforlinux и добавив атрибут --force -device -scale -factor:

sudo nano /usr/bin/skypeforlinux

Изменено:

nohup "$SKYPE_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$SKYPE_LOGS/skype-startup.log" 2>&1 &

К:

nohup "$SKYPE_PATH" --force-device-scale-factor=1.3 --executed-from="$(pwd)" --pid=$$ "$@" > "$SKYPE_LOGS/skype-startup.log" 2>&1 &
0
06.09.2019, 20:07
3 ответа

Используйте readarrayдля считывания имен в массив names. Затем зациклите каждый из элементов массива, чтобы выполнить команду find.

readarray names < names.txt

for n in ${names[@]};do
    find. -type f -name "${n}.iso"
done
3
28.01.2020, 02:13

Вы можете выполнить проверку "или" вfind:find. -name a -o -name b....

Итак, модифицируя ваш файл, добавляя переключатели и используя xargsдля создания команды поиска:

awk 'NR > 1 {print "-o"}; {print "-name", $0".iso"}' input-file | xargs find. 

Для достаточно маленького списка должен выполняться только один find. Если в именах файлов есть пробелы, кавычки или другие специальные символы, рассмотрите возможность использования записей, разделенных нулевым символом ASCII (. В этом случае для изменения ввода можно использовать GNU sed ).

3
28.01.2020, 02:13

Было бы проще сzsh:

names=(${(f)"$(<name-list.txt)"})

ls -ld -- **/(${(~j[|])names}).iso(D)

Где:

  • $(<file)оператор стиля ksh -, который расширяется до содержимогоfile
  • Расширение параметра
  • fпомечает разбиения в строке f, поэтому мы сохраняем в $namesстроки изname-list.txt
  • j[|]:объединяет элементы массивов с помощью с|
  • ~рассматривает это |как оператор глобуса (здесь для чередования )вместо литерала |.
  • **/:рекурсивная подстановка (поиск на любом уровне подкаталогов ).
  • (D):квалификатор glob, который позволяетdotglob(включать скрытые файлы и выполнять поиск внутри скрытых каталогов, как findсделал бы )для этого одного glob.
3
28.01.2020, 02:13

Теги

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