find /folder -name '*.php' -type f -print0 | perl -0 -lne 'printf "%o %s\n", (lstat $_)[2]&07777, $_'
См. также этот связанный вопрос: Преобразуйте ls-l выходной формат к chmod формату.
-print0
расширение GNU, также поддерживаемое BSDs как OS/X. GNUfind
также имеет a-printf
предикат, который мог отобразить режим, но что каждый не был добавлен к BSD'sfind
.(Протестированный на OS/X 10.8.4 и Debian 7, но должен работать над любой системой, которая имеет любую версию
perl
иfind -print0
который включает все системы GNU и весь недавний BSDs),
для редактирования файла Место с OSX SED , вам нужно установить пустое расширение:
$ sed -i '' '1i\
#encoding:utf-8' filename
, и вам нужна литеральная новая линия после I \
. Это указывается POSIX SED .
Только GNU SED позволяет вставить текст на одной линии с командой.
SED
также может работать с несколькими файлами сразу, поэтому вы можете использовать -Exec Command {} +
Форма:
$ find . -iname "*.erb" -type f -exec sed -i '' '1i\
#encoding:utf-8' {} +
Вот несколько способов делать то, что вы хотите:
SED
Найти. «* .erb» -Type F -exec \
Sed -i '' '1S / ^ / # кодировка: UTF-8 \ n /' {} \;
У меня нет доступа к BSD SED
, чтобы проверить, поэтому я не могу гарантировать, что \ N
будет читаться правильно. Попробуйте команду в одном файле и без -I
сначала, чтобы убедиться.
Perl
Найти. «* .erb» -Type F -exec \
Perl -i -pe 'Print "#encoding: UTF-8 \ n", если $. == 1;' {} \;
Shell
Найти. «* .erb» -Type F -exec \
SH -C 'ECHO "#ENCODING: UTF-8"> TMP && CAT "$ 1" >> TMP && MV TMP "$ 1" SH {} \;
Вы можете использовать Vim в режиме Ex:
ex -sc '1i|#encoding:utf-8' -cx file
1
выберите строку 1
i
вставьте текст и новой строки
x
сохраните и закройте