[英]Move all files except one
如何移動除一個以外的所有文件? 我正在尋找類似的東西:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
我將舊的東西移動到新的東西文件夾除了Tux.png
。 .-符號表示否定? 有什么工具可以完成這項工作嗎?
如果您使用 bash 並設置了extglob
shell 選項(通常是這種情況):
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
將以下內容放入 your.bashrc
shopt -s extglob
它擴展了正則表達式。 然后,您可以移動除一個以外的所有文件
mv !(fileOne) ~/path/newFolder
請注意,在復制目錄時,不能在線程中注意到的名稱中使用正向閃存Why extglob except break except condition? :
cp -r !(Backups.backupdb) /home/masi/Documents/
所以Backups.backupdb/
在否定之前在這里是錯誤的,我不會在移動目錄中使用它,因為使用錯誤的風險然后 glob 與其他命令和可能的其他異常。
我會用傳統的 find & xargs 方式 go :
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
xargs -0 mv -t ~/Linux/New
-maxdepth 1
使其不遞歸搜索。 如果你只關心文件,你可以說-type f
。 -mindepth 1
使其不包含~/Linux/Old
路徑本身到結果中。 適用於任何文件名,包括那些包含嵌入換行符的文件名。
一條評論指出 mv -t
選項可能是 GNU 擴展。 對於沒有它的系統
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;
一種快速的方法是修改 tux 文件名,以便您的移動命令不匹配。
例如:
mv Tux.png .Tux.png
mv * ~/somefolder
mv .Tux.png Tux.png
我認為最簡單的方法是使用反引號
mv `ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
編輯:
將反斜杠與 ls 一起使用以防止將其與別名一起使用,即大多數情況下 ls 被別名為 ls --color。
mv `\ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
謝謝@Arnold Roa
對於排除某些文件或目錄的簡單移動,我發現這更安全、更容易依賴。
ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET
以下不是 100% 保證的方法,根本不應該嘗試編寫腳本。 但有時它足以用於快速交互式 shell 使用。 一個文件文件 glob 像
[abc]*
(將匹配名稱以 a、b 或 c 開頭的所有文件)可以通過先插入“^”字符來否定,即
[^abc]*
我有時會使用它來匹配“lost+found”目錄,例如:
mv /mnt/usbdisk/[^l]* /home/user/stuff/.
當然,如果還有其他以 l 開頭的文件,我必須在之后處理這些文件。
怎么樣:
mv $(echo * | sed s:Tux.png::g) ~/Linux/New/
不過,您必須在文件夾中。
這可能更簡單,更容易記住,它對我有用。
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New
find 命令列出所有常規文件,fgrep 命令過濾掉所有 Tux.png。 反引號告訴 mv 移動生成的文件列表。
ls ~/Linux/Old/ | grep -v Tux.png | xargs -i {} mv ~/Linux/New/'
可以像這樣跳過 grep :
ls ~/Linux/Old/ -QI Tux.png | xargs -I{} mv ~/Linux/Old/{} ~/Linux/New/
你如何移動文件夾中的所有內容,然后將 Tux.png 移回?
我想不出任何 shell 語法可以隨便說“除...之外的所有內容”。
將所有文件(不包括文件除外)移動到 except_file
find -maxdepth 1 -mindepth 1 -not -name except_file -print0 |xargs -0 mv -t./except_file
例如(緩存是當前的,除了文件)
find -maxdepth 1 -mindepth 1 -not -name cache -print0 |xargs -0 mv -t./cache
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.