如何删除除一个文件以外的所有隐藏文件和非隐藏文件?
How do you delete all hidden and non-hidden files except one?
如何删除除 Bash 中的一个以外的所有隐藏和非隐藏文件?
因为我正在创建一个存储库,现在正在创建一个更新脚本。
这将删除当前目录中除“file-x”之外的所有文件(不是目录):
rm `find . -maxdepth 1 -type f | grep -v "^\./file-x$"`
查找创建所有文件(包括隐藏文件)的列表。 “grep -v”从该列表中删除行“./file-x”。
我会使用 Bash 的 extended globbing and dot-globbing 功能:
shopt -s dotglob extglob
cd /path/to/clean && rm !(file-name-to-keep)
这可以通过更改到父目录来实现——如果成功的话——在扩展通配符上执行 rm
命令。该扩展通配符要求 bash 扩展除 file-name-to-keep
.
之外的所有文件名(包括以句点开头的文件名,给定 shopt -s dotglob
)
这将删除当前目录中您有权删除的所有内容,递归地保留由 -path
命名的文件及其父路径。
# Remove all files bar one
find . -mindepth 1 -not -type d -not -path ./file/to/keep -exec rm -rf {} +
# Then remove all empty directories
find . -mindepth 1 -type d -exec rmdir -p {} + 2>/dev/null
`rmdir` will get fed a lot of directories it’s already removed (causing error messages). `rmdir -p` is POSIX. This would not work without `-p`.
您可以使用额外的 -path
参数、and/or glob 模式来保存更多文件。路径必须与起点匹配,即 ./
.
如何删除除 Bash 中的一个以外的所有隐藏和非隐藏文件?
因为我正在创建一个存储库,现在正在创建一个更新脚本。
这将删除当前目录中除“file-x”之外的所有文件(不是目录):
rm `find . -maxdepth 1 -type f | grep -v "^\./file-x$"`
查找创建所有文件(包括隐藏文件)的列表。 “grep -v”从该列表中删除行“./file-x”。
我会使用 Bash 的 extended globbing and dot-globbing 功能:
shopt -s dotglob extglob
cd /path/to/clean && rm !(file-name-to-keep)
这可以通过更改到父目录来实现——如果成功的话——在扩展通配符上执行 rm
命令。该扩展通配符要求 bash 扩展除 file-name-to-keep
.
shopt -s dotglob
)
这将删除当前目录中您有权删除的所有内容,递归地保留由 -path
命名的文件及其父路径。
# Remove all files bar one
find . -mindepth 1 -not -type d -not -path ./file/to/keep -exec rm -rf {} +
# Then remove all empty directories
find . -mindepth 1 -type d -exec rmdir -p {} + 2>/dev/null
`rmdir` will get fed a lot of directories it’s already removed (causing error messages). `rmdir -p` is POSIX. This would not work without `-p`.
您可以使用额外的 -path
参数、and/or glob 模式来保存更多文件。路径必须与起点匹配,即 ./
.