Мне нужно найти все .nfo
файлы в моем медиа-каталоге, чтобы я мог использовать sed
для изменения некоторых частей. Проблема в том, что в моих папках есть пробелы в именах.
find /media/media1/HDTV -name \*.nfo -type f
media/media1/HDTV/Band of Brothers/Season 1/
…
Выходной файл не найден командой sed
для изменения нужных мне строк.
find
не заботятся о специальных символах в именах файлов, но программа, которая анализирует вывод find
, может. Если вы используете xargs
, используйте опцию -print0
для find
, а опцию -0
для xargs
. Это говорит find
и xargs
использовать нулевые символы (которые не могут появляться в именах файлов) в качестве разделителя между именами файлов, а xargs
не делать никакого другого анализа, который бы искажал имена файлов, содержащие пробелы.
find /media/media1/HDTV -name '*.nfo' -type f -print0 |
xargs -0 sed -i 's/pattern/replacement/'
Другой способ вызвать команду для многих файлов - это использовать только find
.
find /media/media1/HDTV -name '*.nfo' -type f -exec sed -i 's/pattern/replacement/' {} +
Печатайте как обычно, но ставьте \ после слова и перед пробелом.
то есть. cd ~/home/New\ Volume/movies/new\ stuff