Следующие команды сокращают первый 31 байт из $file
(использование $file~
как временный файл. копия):
dd if="$file" of="$file~" bs=1 skip=31
mv "$file~" "$file"
Только необходимо перечислить или find
все файлы под /foo/
и выполните два выше для каждого $file
найденный.
Если Вы хотите содержание единственного каталога, легкий метод должен измениться на него сначала:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
То, что Вы видели, является этим *
расширяется до списка названий файлов, которые не начинаются с a .
. Это - зарегистрированное поведение, и это - главная причина, почему файлы, имя которых начинается с a .
как говорят, скрыты (другой, это ls
не показывает им по умолчанию).
Нет никакого действительно удобного портативного способа перечислить все файлы в каталоге. Можно использовать
~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*
но если не будет никакого файла, соответствующего одному из шаблонов затем, то шаблон останется нерасширенным. В ударе можно установить dotglob
опция постараться не рассматривать продвижение .
особенно (.
и ..
все еще исключены из соответствий):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
В ksh, или в ударе, если Вы устанавливаете extglob
опция (или в zsh, если Вы устанавливаете ksh_glob
опция), можно записать шаблон, который соответствует всем файлам кроме .
и ..
:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)
В zsh существует более простой способ сказать это .
не должен рассматриваться особенно в шаблоне:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)
Нет, *
как предполагается, не возвращает все файлы. Это возвращает только видимые.
Более легкое решение:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .