Я не думаю, что можно обойтись без URL-кодирования. wget
src / url.c
удаляет их; насколько я могу судить из очень беглого взгляда на источник, выхода нет.
/* Resolve "." and ".." elements of PATH by destructively modifying
PATH and return true if PATH has been modified, false otherwise.
The algorithm is in spirit similar to the one described in rfc1808,
although implemented differently, in one pass. To recap, path
elements containing only "." are removed, and ".." is taken to mean
"back up one element". Single leading and trailing slashes are
preserved.
For example, "a/b/c/./../d/.." will yield "a/b/". More exhaustive
test examples are provided below. If you change anything in this
function, run test_path_simplify to make sure you haven't broken a
test case. */
Usefuser -m /path/to/folder 2>/dev/null
(descarta stderr
de la salida )o examine los casos de uso disponibles conman fuser
Tenga en cuenta que su comando no enumera los procesos que se ejecutan en un directorio. Enumera los procesos cuyos archivos de imagen de programa fueron encontrados(por el shell )en ese directorio y, por lo tanto, enumerados como tales en su argumento de comando 0 (o que tienen ese directorio mencionado en su otro comando argumentos ). Esos procesos, por supuesto, no necesariamente se ejecutan en ese directorio. Asumiré que desea lo que solicitó (dado que dijo ejecutándose en un directorio tres veces ), no lo que realmente hizo su comando.
Ya que no ha especificado un sistema operativo:
Use la opción -f
a fstat
para filtrar por sistema de archivos, use el comando stat
para obtener el número de inodo del directorio deseado (nombrado en la variable de shell ${directory}
según corresponda de antemano ), y use awk
para usar este último como un filtro en las entradas wd
generadas porfstat
:
fstat -f "${directory}" | awk '{ if ($4 == "wd" && $6 == '"`stat -f %i \"${directory}\"`"' && !x[$3]++) print $3; }'Ejecute (solo)
fstat
como superusuario para incluir los procesos de otros usuarios. Dos enfoques:
-d
a lsof
para que seleccione solo entradas cwd
, use el comando stat
y algún dc
procesamiento posterior -para obtener el número de inodo y el dispositivo montado mayor/menor números del directorio deseado (nombrados en la variable de shell ${directory}
según corresponda de antemano ),y use awk
para usar el último dos como un filtro en la salida delsof
:lsof -d cwd | awk '{ if ($8 == '"`stat --format %i \"${directory}\"`"' \ && $6 == "'"`dc -e \"16doi \`stat --format %D \"${directory}\"\` 100~ r n[,]Pn\"`"'" \ && !x[$2]++) print $2; }'Ejecute (solo)
lsof
como superusuario para incluir los procesos de otros usuarios. fuser
como en otra respuesta.