2015-04-26 4 views
0

Я создал файл vi, и я хочу проверить файлы в своем домашнем каталоге, чтобы увидеть их размер. Если размер обычного файла больше 1 КБ, я хочу создать резервную копию в виде сжатого файла с расширением .bak. Я начал с помощью команды du -h --max-depth=0 * | sort -r которые перечисляют файлы как ...Bash, если размеры файлов больше 1kb

10K archive.tar 
1.0K activity48 
1.0K activity47 
1.0K activity46 
1.0K activity45 
1.0k activity44 
1.0K activity43 
1.0K activity42 
1.0K activity41 
1.0K activity40 
1.0K activity39 
1.0K activity38 

Вот некоторые из файлов, перечисленных, но моя мысль мне нужно вырезать поле 1 и каким-то образом создать, если заявление и сравнить поле что-то как if [ $x -ge 1.0 ] ; do что-то. Любые мысли о том, как я должен идти по этой проблеме ...?

ответ

3

Я хотел бы использовать find:

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \; 

я, вероятно, не использовать пользовательские расширения для сжатого файла, хотя; это просто просит о путанице в будущем.

find ищет каталог (. в этом случае) для файлов, которые пропускают фильтр. Можно построить сложные фильтры; в этом сравнительно простом случае, несколько примитивных фильтров прикованы выбрать

  • Файлы, которые являются не более чем на один уровень вглубь . (т.е. подкаталоги не ищется),
  • являются обычными файлами,
  • 1KB или больше, и
  • , для которых gzip -k S .bak filename выходы со статусом 0.

-exec фильтр специфичен тем, что считается действие (другие действия включают -delete и -print). Если фильтр не содержит действия, в фильтр добавляется неявное действие -print, чтобы были напечатаны имена всех файлов, которые соответствуют фильтру. Поскольку наш фильтр содержит действие, этого не происходит.

В любом случае нас не интересует результат фильтра -exec в этом случае, только в его побочном эффекте выполнения указанной команды. Полезно знать, что -exec также является фильтром, если вы хотите сгруппировать команды. Например, если вы хотите скопировать файлы резервных копий в другую папку после их упаковки, вы можете написать

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \; -exec cp '{}.bak' /some/where/else/ \; 

Тогда cp filename.bak /some/where/else/ будет выполняться только тогда, когда gzip -k -S .bak filename вернулся со статусом выхода из 0 (то есть, если это указано успешное завершение).

3
find . -maxdepth 1 -type f -size +1k -exec gzip {} \; 

Это должно быть сделано. Ну, он создает сжатые .gz-файлы.

Смежные вопросы