Принятие использования chmod
от GNU coreutils пакет на Ubuntu 12.10.
chmod 775 . -R
выполняется fchmodat
системный вызов каждого файла, который это находит независимо от того, нужно ли для полномочий изменение или нет. Я подтвердил это и осмотром кода и использованием strace chmod 775 . -R
(отрывок ниже) для списка фактического поведения.
newfstatat(4, "d", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "d", 0775) = 0
newfstatat(4, "c", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "c", 0775) = 0
newfstatat(4, "a", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "a", 0775) = 0
newfstatat(4, "b", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "b", 0775) = 0
Существует несколько недостатков выполнения fchmodat
на каждом файле
find
/xargs
/chmod
метод, упомянутый другими, вероятно, будет более быстрым, только изменяя файлы то изменение потребности.fchmodat
изменяет модификацию состояния файла (ctime) каждого файла. Это заставит каждый file/inode изменяться каждый раз и вероятно вызовет избыточные записи на диск. Могло бы быть возможно использовать, монтируют опции остановить эти избыточные записи.Простой эксперимент показывает изменения ctime, происходящие для прямо chmod
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 d
auser@duncow:/tmp/blah.test$ chmod 775 . -R
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 d
Но это не изменяется для find
/xargs
/chmod
несколько минут спустя
auser@duncow:/tmp/blah.test$ date
Tue Jun 18 18:27:27 BST 2013
auser@duncow:/tmp/blah.test$ find . ! -perm 775 -print0 | xargs -0 -I {} chmod 775 {}
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 d
Я был бы всегда склонен использовать find
/xargs
/chmod
версия, потому что находят, дает больше контроля выбором вещей.
Вместо этого используйте fmt
:
fmt --width=80 file
Из man fmt
:
-w, --width=WIDTH
maximum line width (default of 75 columns)
Нижеприведенное решение может помочь:
cat file_name.txt | fmt -w 80 > reduce_file_name.txt
fmt - простой оптимальный формат текста
. Используйте свертку
следующим образом:
fold -s -w80 file
Это будет разделено только на пробелы ( -s
), используя ширина строки 80 символов ( -w80
). Таким образом, он делает то же самое, что и решения fmt
, но также позволяет прерывать любой символ, опуская параметр -s
.