find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Ви можете легко переключити його, щоб включити те, що ви хочете стиснути ( -name '*.txt -or -name '*.html
тощо) замість того, як зараз, виключаючи деякі файли (вже стиснуті, резервні та тимчасові файли).
Також обробляє пробіли у назві файлу.
Змініть gzip
на echo gzip
тестування. Або пропустіть частину -exec разом.
Редагувати: О, я забув зазначити, що це не перевіряє, чи <target>.gz
вже існує. Це може бути або не бути проблемою.
Edit2: Гаразд, тут ми переглядаємо щось, що перевіряє наявний файл. Якщо цього, можливо, захочеться. Пробачте, єдиність.
while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz"; fi done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))
Мій find
-фуд, можливо, не такий, як міг би бути, можливо, цілком можливо пропустити прямо в пошуку.
*.*
вls
?