簡體   English   中英

移動除一個以外的所有文件

[英]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

對於bash, ……答案是正確的。 這是zsh (我選擇的 shell)語法:

mv ~/Linux/Old/^Tux.png ~/Linux/New/

需要設置EXTENDED_GLOB shell 選項。

對於排除某些文件或目錄的簡單移動,我發現這更安全、更容易依賴。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM