0
A
回答
1
您可以使用ls -1
(這是一把手,而不是小寫字母L)以每行列出一個文件,然後使用grep -vx <pattern>
排除(-v
)行恰好(-x
)匹配<pattern>
,然後將xargs
排除到您的命令rm
。例如,
ls -1 | grep -vx file1 | xargs rm
如果您的grep
版本不支持-x
選項,你可以使用錨:
ls -1 | grep -vx '^file1$' | xargs rm
要與比rm
其他命令使用這個可能不採取任意數量的參數,請記住將-n 1
選項添加到xargs
,以便逐個處理參數:
ls -1 | grep -vx '^file1$' | xargs -n 1 rm
我相信你也可以做到這一點使用find
的-name
選項,指定否定一個參數,即的實用find
本身可以支持這樣的表達式!(file1)
,但你還是得管結果爲xargs
。
1
tcsh對glob模式有特殊的^
語法(在csh,sh或bash中不支持)。用^
加上一個全局模式前綴,否定它,導致匹配不與匹配模式的所有文件名。
引述的tcsh手冊:
一個完整的水珠圖案也可以用'^'否定:
> echo * bang crash crunch ouch > echo ^cr* bang ouch
單個文件名不是水珠圖案,所以^
前綴不適用於它,但它可以通過例如用方括號圍繞第一個字符變成一個。
所以這個:
rm ^[f]ile1
應該刪除比file1
其他當前目錄下的所有文件。
我強烈建議使用它之前,無論是第一次使用echo
命令測試此:
echo ^[f]ile1
或使用按Ctrl-X*拓展模式的文件列表擊球前輸入。
更新:自從我瞭解到bash支持類似的功能但語法不同。在bash中,!(PATTERN)
匹配任何而不是匹配的模式。除非啓用extglob
外殼選項,否則不會識別此項。與tcsh的^
語法不同,該模式可以是單個文件名。這與你所要求的不相關,但如果你決定切換到bash,它可能會很有用。
zsh可能有類似的東西。
相關問題
- 1. 刪除一切,但文件擴展名
- 2. 硬復位如何消除一切,但不刪除* .zip文件
- 3. 的preg_replace HOW TO:從$ _ SERVER刪除[ 'SCRIPT_NAME']一切..但文件名
- 4. 刪除一切,但具有指定擴展名的文件
- 5. 的Java刪除一切,但東西
- 6. 刪除最後一個文件夾的htaccess後一切
- 7. 刪除一切
- 8. 刪除一切
- 9. 刪除一切
- 10. 刪除一切
- 11. 刪除一切,但從一個語料庫的HTML標籤
- 12. 讓MSDeploy(Visual Studio中)不會刪除App_Data文件夾,但刪除一切
- 13. 從一個月中刪除所有文件,但是刪除最後一個
- 14. 排序,但一切都被刪除
- 15. 刪除一切,但不包括模式
- 16. 如何刪除一切,但URL PHP
- 17. 刪除一個php文件
- 18. 如何從推文中刪除一切,但純文本與PHP?
- 19. 的strcpy()刪除一切
- 20. BAT文件能夠刪除一些文件,但不能刪除其他文件
- 21. jQuery的刪除除URL一切都在一個字符串
- 22. PHP的正則表達式來刪除一切,但從文件名日期
- 23. 的Unix:如何刪除一個文件
- 24. 一切都很刪除某個字符
- 25. 刪除一切,包括兩個詞
- 26. htaccess阻止一切,但1個文件和1個文件夾
- 27. 忽略一切,但一個子文件夾中的水銀
- 28. 刪除除所有的一切由()
- 29. 清除在軌高速緩存,但不刪除一切
- 30. C#中刪除所有文件,但不會持續一個
這真的在bash中工作嗎?我只是得到「'-bash:!:event not found'」。 –