Причина сбоев в том, что я не установил vim, поэтому
sudo apt-get install vim
исправил это
Поскольку вы пометили этот linux
, я предполагаю, что у вас есть GNU find
и GNU tar
.
Если ваши имена файлов не содержат встроенных символов новой строки и вы не хотите архивировать пустые каталоги:
find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -
find
находит соответствующие файлы, а -T -
сообщает tar
, чтобы прочитать список файлов для архивирования из stdin
.
Уточним это, если вы хотите включить пустые каталоги:
find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
tar cvf "$1/$2" -T -
И если вы также хотите обрабатывать имена файлов со встроенными символами новой строки:
find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
tar cvf "$1/$2" --null -T -
Попробуйте это:
find test/ -not -iname ".*" -not -empty -exec tar --no-recursion -rvf file.tar {} \;
Единственная проблема в том, что пустые каталоги не будут включены, но я думаю, что где-то есть обходной путь...