Рассмотрите возможность перенаправления самого цикла:
#!/bin/sh
for jj in seq 100; do
cat INPUT.file
done >> OUTPUT.file
В вашем случае, если записи файлов в вашем .gitignore
не начинаются с !
, тогда этот вкладыш -вам подойдет:
while read -r entry;do rm -rf ${entry}; done <.gitignore
git clean -X -f -n
git clean -X
удалит все файлы, соответствующие шаблонам в .gitignore
. -n
в конце приводит к тому, что он фактически не удаляет файлы, а только пробный запуск, сообщая о файлах, которые были бы удалены.
Добавьте -d
, чтобы также удалить игнорируемые каталоги.
Без -X
удаляет неотслеживаемые файлы (, но не игнорируемые файлы ).
См. git clean --help
.
git clean -Xdf
С заглавными буквами -X
,git clean
только удаляет файлы, соответствующие .gitignore
.
С -d
git clean
также удаляет целые каталоги, соответствующие .gitignore
.
С помощью -f
git clean
фактически удалит данные, а не предупредит вас. Будьте осторожны. Могут быть другие вещи (, такие как личная direnv
конфигурация ), которые .gitignored
по другим причинам, поэтому убедитесь, что вы всегда понимаете, что будет делать эта команда, прежде чем она будет запущена.
Особая благодарность @Kusalananda за то, что поделился git clean
.
В качестве альтернативы, если у вас есть, скажем, папка для зависимостей, которая включает каталоги с символическими ссылками, и вы не хотите git clean
рекурсивно удалять все внутри этих каталогов, вы можете использовать эту более длинную форму:
git ls-files --others --ignored --exclude-standard --directory | head -c -1 | tr '\n' '\0' | xargs -0 -r rm -r
git ls-files
с этими опциями выводит те же каталоги, что и git clean -Xdn
, но больше машиночитаемых -.
head -c -1
обрезает завершающий байт новой строки.
tr '\n' '\0'
переводит все новые строки в NUL
s.
xargs -0 -r rm -r
удаляет файлы и каталоги. -0
делает NUL
разделителем. -r
заставляет пропускать пустой ввод (предупреждение :это не -переносимое расширение GNU ).