diff --git a/cli/clean-drive.js b/cli/clean-drive.js
index f0c23b3b2933b84f1b7aa0da0762d5626d371c29..14eb0027958338a6f4c86dccd95e47c313de04b7 100644
--- a/cli/clean-drive.js
+++ b/cli/clean-drive.js
@@ -1,3 +1,5 @@
+const chalk = require('chalk');
+const log = require('single-line-log').stdout;
 const sequential = require('promise-sequential');
 const { default: DriveFile, deleteDriveFile } = require('../built/models/drive-file');
 const { default: Note } = require('../built/models/note');
@@ -12,45 +14,61 @@ async function main() {
 	let prev;
 
 	for (let i = 0; i < count; i++) {
-		promiseGens.push(() => new Promise(async (res, rej) => {
-			const file = await DriveFile.findOne(prev ? {
-				_id: { $gt: prev._id }
-			} : {}, {
-				sort: {
-					_id: 1
-				}
-			});
+		promiseGens.push(() => {
+			const promise = new Promise(async (res, rej) => {
+				const file = await DriveFile.findOne(prev ? {
+					_id: { $gt: prev._id }
+				} : {}, {
+					sort: {
+						_id: 1
+					}
+				});
 
-			prev = file;
+				prev = file;
 
-			console.log(`scanning ${file._id}`);
+				if (file == null) return res();
 
-			const attachingUsersCount = await User.count({
-				$or: [{
-					avatarId: file._id
-				}, {
-					bannerId: file._id
-				}]
-			}, { limit: 1 });
-			if (attachingUsersCount !== 0) return res();
+				log(chalk`scanning: {bold ${file._id}} ...`);
 
-			const attachingNotesCount = await Note.count({
-				mediaIds: file._id
-			}, { limit: 1 });
-			if (attachingNotesCount !== 0) return res();
+				const attachingUsersCount = await User.count({
+					$or: [{
+						avatarId: file._id
+					}, {
+						bannerId: file._id
+					}]
+				}, { limit: 1 });
+				if (attachingUsersCount !== 0) return res();
 
-			const attachingMessagesCount = await MessagingMessage.count({
-				fileId: file._id
-			}, { limit: 1 });
-			if (attachingMessagesCount !== 0) return res();
+				const attachingNotesCount = await Note.count({
+					mediaIds: file._id
+				}, { limit: 1 });
+				if (attachingNotesCount !== 0) return res();
 
-			console.log(`deleting ${file._id}`);
+				const attachingMessagesCount = await MessagingMessage.count({
+					fileId: file._id
+				}, { limit: 1 });
+				if (attachingMessagesCount !== 0) return res();
+
+				deleteDriveFile(file).then(res).catch(rej);
+			});
+
+			promise.then(x => {
+				if (prev) {
+					if (x == null) {
+						log(chalk`{green skipped: {bold ${prev._id}}}`);
+					} else {
+						log(chalk`{red deleted: {bold ${prev._id}}}`);
+					}
+				}
+				log.clear();
+				console.log();
+			});
 
-			deleteDriveFile(file).then(res).catch(rej);
-		}));
+			return promise;
+		});
 	}
 
 	return await sequential(promiseGens);
 }
 
-main().then(console.dir).catch(console.error);
+main().then().catch(console.error);
diff --git a/package.json b/package.json
index 0688c190169d7c893e5bdb0dfe08ac829df7746d..1d6cf4b9e8619dff53001eb837ed59eee756bfb9 100644
--- a/package.json
+++ b/package.json
@@ -76,6 +76,7 @@
 		"@types/request-promise-native": "1.0.14",
 		"@types/rimraf": "2.0.2",
 		"@types/seedrandom": "2.4.27",
+		"@types/single-line-log": "^1.1.0",
 		"@types/speakeasy": "2.0.2",
 		"@types/tmp": "0.0.33",
 		"@types/uuid": "3.4.3",
@@ -180,6 +181,7 @@
 		"s-age": "1.1.2",
 		"sass-loader": "7.0.1",
 		"seedrandom": "2.4.3",
+		"single-line-log": "^1.1.2",
 		"speakeasy": "2.0.0",
 		"style-loader": "0.21.0",
 		"stylus": "0.54.5",