f='/path/to/features[30,55].R' find. -type f -name DONE \ -exec sh -c 'echo cp "$1" "$(dirname "$2")"' sh "$f" {} ';'
Это правильный вызов
sh
со сценарием, который копирует указанный файл в каталог найденного файлаDONE
.Удалите
echo
, как только убедитесь, что он работает правильно.Как вариант,
find. -type f -name DONE \ -execdir cp "$f". ';'
... если ваш
find
имеет-execdir
.Ваш вопрос был тройным:
Ошибка возникает из-за исключения
-c
изsh -c
, что означает, чтоsh
пытался выполнить сценарий с именемcp /Users/perc...
(как одно имя ). Он не нашел этот файл.Подоболочка также неправильно заключает имя файла в кавычки. Поскольку он содержит подстановочные символы имени файла, его необходимо заключить в кавычки.
Размещение
{}
внутри скрипта потенциально опасно или, по крайней мере, может привести к путанице. См., например, Почему Solaris 10 находит / -exec sh -c "echo {}" \; печатать "{}" вместо имен файлов?При второй попытке файлы
DONE
будут перезаписаны содержимым сценария R. Здесь вы также должны указать имя файла R-скрипта (, хотя это не исправит ).
Параметры Sysctl можно установить с помощью команды ядра -строки , начиная с версии ядра 5.8 , благодаря Властимилу Бабке из SUSE.
sysctl.*= [KNL]
Set a sysctl parameter, right before loading the init
process, as if the value was written to the respective
/proc/sys/... file. Both '.' and '/' are recognized as
separators. Unrecognized parameters and invalid values
are reported in the kernel log. Sysctls registered
later by a loaded module cannot be set this way.
Example: sysctl.vm.swappiness=40