Я использую cygwin find с опцией -ls (find . -ls
), чтобы получить список файлов с полным путем.
Из-за того, что UTF-16 (в данном случае windows XP) преобразуется в en_UTF-8 под cygwin, специальные символы, такие как ударение, переводятся в 2 восьмеричных значения (например, à
переводится в \303\240
.
Если я использую прямую команду ls -lias
, строка не переводится и может быть использована с простой кавычкой в любой другой команде (sed, mv, cp, ln, ...).
Вопрос:
Есть ли способ напрямую заставить find возвращать имя файла, как это делает ls?
Вообще-то, я использую sed для обратного перевода, используя временный файл и printf
для получения результата восьмеричного перевода, но это медленно, немного страшно и не пуленепробиваемо, особенно с последующими mv и rm на основе этой строки.
Я также использую find . -exec ls -lias {} \;
рабочий execpt, который взрывает время из-за fork/shell/ls на каждый файл (15 минут с find -ls, 15 часов с -exec)
Я не знаю, возможно ли то, что вы хотите сделать, с помощью find
, но вы можете значительно ускорить текущее использование find
, если вы используете find | xargs
вместо find -exec
.