«Найти» вывод относительно каталога

Я хотел бы использовать find чтобы перечислить все файлы и каталоги рекурсивно в данном корне для операции cpio . Однако я не хочу, чтобы корневой каталог сам отображался в путях. Например, в настоящее время я получаю:

 $ find diskimg diskimg diskimg/file1 diskimg/dir1 diskimg/dir1/file2 

Но я хотел бы получить

 file1 dir1 dir1/file2 

(обратите внимание, что корень также не в моем желаемом выходе, но это легко избавиться от tail ).

Я нахожусь в OS X, и я бы предпочел не устанавливать какие-либо дополнительные инструменты (например, GNU find), если это возможно, так как я хотел бы поделиться сценарием, который я пишу другим пользователям OS X.

Я знаю, что это можно сделать с помощью cut чтобы вырезать корневой список, но это кажется субоптимальным решением. Есть ли лучшее решение?

Если то, что вы пытаетесь сделать, не слишком сложно, вы можете выполнить это с помощью sed:

 find diskimg | sed -n 's|^diskimg/||p' 

Или cut :

 find diskimg | cut -sd / -f 2- 

cd в каталог сначала:

 cd diskimg && find . 

По завершении вы вернетесь в свой корневой каталог.

Ваши файлы будут добавлены с ./ в этом случае; единственный способ, которым я вижу вокруг, – использовать cut :

 { cd diskimg && find .; } | tail -n +2 | cut -c 3- 

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

 (cd diskimg && find .) 

Другой, более сложный, но использующий только подход find из моего другого ответа:

 find diskimg -mindepth 1 -printf '%P\n'