Как `xargs` работает с именами файлов, предоставленными` find`, что может вызвать проблемы?

Это вполне возможно, учитывая, что у вас достаточно места для хранения.

Единственные проблемы / проблемы, которые я могу предвидеть, - это «конфиденциальность» вещей, которые у вас там будут.

Наличие all-in dropbox делает возможной атаку «человек посередине», вынюхивая ваши данные из сети во время синхронизации.

Последнее, что вы можете захотеть принять во внимание, - это возможность того, что изменения в файле будут перезаписаны с одного места на другое, если несколько человек будут использовать машины синхронно.

Кроме этого, я не вижу других связанных проблем.

-1
09.06.2018, 16:58
2 ответа

El problema está en cómo xargslee la entrada y la pasa al comando.

Podemos ver esto fácilmente conrm -i

$ touch a 'b c' 'd
> e'
$ find -type f | cat
./d
e
./b c
./a
$ find -type f | xargs rm -i
rm: cannot remove './d': No such file or directory
rm: cannot remove 'e': No such file or directory
rm: cannot remove './b': No such file or directory
rm: cannot remove 'c': No such file or directory
rm: remove regular empty file './a'? $ 

Tenga en cuenta que tratamos de eliminar 5 archivos; ./a, ./b, c, ./dye

Entonces, tanto el espacio como la nueva línea en el nombre del archivo hacen que se pasen dos argumentos al comando.

La ​​solución estándar es usar find -print0yxargs -0

$ find -type f -print0 | xargs -0 rm -i
rm: cannot remove '.': Is a directory
rm: remove regular empty file './d\ne'? 
rm: remove regular empty file './b c'? 
rm: remove regular empty file './a'? $ 

Ahora el carácter NUL (que no puede ser parte de un nombre de archivo )se usa como separador y el espacio en blanco no es significativo.

4
28.01.2020, 05:06

Другая половина вопроса заключается в том, что с этим делать. Ответом на это является использование разделителя \0вместо разделителя пробелов(-0в недопустимом имени файла -, это единственный символ, который не разрешен. /является частью имени файла, но имеет особое назначение ).

Для этого измените код следующим образом.

find … -print0 | xargs -0 …

1
28.01.2020, 05:06

Теги

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