с zsh
:
src=(${(f)"$(<src.txt)"})
for f (${(f)"$(<dest.txt)"})
(($src[(Ie)$f:t])) && mv /src/dir/$f:t $f
Читает каждый файл в массиве, а затем для каждого элемента в массиве "dest" , если базовое имя (: t
- это модификатор zsh
, который удаляет все ведущие компоненты имени пути) также находится в массиве «src» , затем он перемещает файл.
Для выполнения пробного запуска replace mv
с printf '"% s" -> "% s" \ n'
.
Теперь вы также можете запустить (все еще в zsh
):
for f (${(f)"$(grep -Ff src.txt dest.txt)"})
mv /src/dir/$f:t $f
, который работает нормально, пока ни одно из имен файлов в src.txt
не соответствует ни одному каталогу имена (или часть этого имени) в списке путей в dest.txt
(например, имя файла data1
в src.txt
и путь вроде / path / data1_dir / some_file
в dest.txt
даст ложное срабатывание). Чтобы избежать этого, вы можете передать имена файлов в grep
в виде шаблонов (т. Е. Используя регулярное выражение типа / filename $
) вместо F
фиксированных строк, чтобы они соответствовали только последний компонент путей в dest.txt
. Хотя это требует экранирования всех специальных символов (если они есть) в именах файлов в src.txt
, например на этот раз с bash
( 4
):
readarray -t files < <(sed 's|[[\.*^$/]|\\&|g;s|.*|/&$|' src.txt | grep -f- dest.txt)
for f in "${files[@]}"; do mv /src/dir/"${f##*/}" "$f"; done
SystemTap с помощью debuginfo может отслеживать вызовы функций в библиотеках; в системе Centos 7:
$ sudo stap -L 'process("/lib64/libglib*").function("*strndup*")'
process("/usr/lib64/libglib-2.0.so.0.5000.3").function("g_strndup")
$
И это можно использовать как probe
точку, которая печатает обратные трассировки или что угодно, что вы хотите, что может быть записано с помощью SystemTap:
probe begin {
printf("ok\n")
}
probe process("/usr/lib64/libglib-2.0.so.0.5000.3").function("g_strndup") {
/* printf("%s[%d]\n", execname(), pid()) */
print_usyms(ubacktrace())
}
сохранено как probelibraryfunc.stp
это можно запустить через
$ sudo stap probelibraryfunc.stp
хотя может выдавать сумасшедшие объемы вывода, если вызов является обычным...