Bash
刪除未命名為“today.md”的文件
我在工作目錄中有一系列降價文件:
$ ls *.md csv_reader.md egrep.md find.md found_pdfs.md osPathSep_help.md readme.md smtplib_help.md today.md
我想刪除它們,除了“today.md”
#!/usr/local/bin/bash for i in ./*.md ; do if [[ $i != "today.md" ]]; then echo $i fi done
執行它並得到
$ bash bash/remove_files.sh ./csv_reader.md ./egrep.md ./find.md ./found_pdfs.md ./osPathSep_help.md ./readme.md ./smtplib_help.md ./today.md
儘管如此,結構化命令在命令行中並不方便,我怎麼能用較短的命令完成這樣的任務
使用否定匹配(需要
shopt -s extglob
,但可能已經設置):rm !(today).md
(您可以先使用
ls
而不是rm
檢查結果)。強大的力量
extglob
,你也可以rm !(yesterday|today).md
如果您想保留兩個文件。
find . -maxdepth 1 -name '*.md' ! -name today.md -type f -print
應該只找到
-type f
目前目錄中的所有文件()(.
–或顯式放一個目錄名)(-maxdepth 1
防止後面的子目錄.md
)以( )結尾-name '*.md'
,不包括(!
)文件today.md
。一定要包含單引號,
'*.md'
這樣你的 shell 在執行之前不會嘗試將其擴展為目前目錄中的 .md 文件列表find
。它將列印要刪除的文件列表。改為
-delete
它們。