svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done
คุณสมบัตินี้มีดังต่อไปนี้:
- ไฟล์ที่ถูกละเว้นและไม่ได้ติดตามจะถูกลบ
- มันใช้งานได้แม้ว่าชื่อไฟล์จะมีช่องว่าง (ยกเว้น newline แต่มีไม่มากที่สามารถทำได้เกี่ยวกับเรื่องอื่นนอกจากใช้
--xml
ตัวเลือกและแยกผลลัพธ์ xml ที่ได้)
- มันทำงานได้แม้ว่า
svn status
พิมพ์ตัวอักษรสถานะอื่น ๆ ก่อนที่ชื่อไฟล์ (ซึ่งมันไม่ควรเพราะไฟล์ไม่ได้ติดตาม แต่ในกรณีที่ ... )
- ควรทำงานกับระบบที่สอดคล้องกับ POSIX
ฉันใช้เชลล์สคริปต์ชื่อsvnclean
ที่มีต่อไปนี้:
#!/bin/sh
# make sure this script exits with a non-zero return value if the
# current directory is not in a svn working directory
svn info >/dev/null || exit 1
svn status --no-ignore | grep '^[I?]' | cut -c 9- |
# setting IFS to the empty string ensures that any leading or
# trailing whitespace is not trimmed from the filename
while IFS= read -r f; do
# tell the user which file is being deleted. use printf
# instead of echo because different implementations of echo do
# different things if the arguments begin with hyphens or
# contain backslashes; the behavior of printf is consistent
printf '%s\n' "Deleting ${f}..."
# if rm -rf can't delete the file, something is wrong so bail
rm -rf "${f}" || exit 1
done