Linux系統中移動除一個檔案外的所有檔案
引言
如果您使用Linux,有時您可能需要一次複製多個檔案,然後稍後刪除其中一些檔案。我們將仔細研究幾種實現此類結果的不同方法。
重新命名不需要的檔案
您可以重新命名不需要的檔案,使其成為“.”(點)檔案,這意味著隱藏檔案,這意味著mv無法看到它。使用星號重新命名不需要的檔案後,我們將使用正則表示式刪除其餘檔案。
/source_dir$ mv file5 .file5 /source_dir$ mv * ~/target_dir/ /source_dir$ ls -la total 0 drwxrwxr-x 2 ubuntu ubuntu 60 Jun 10 03:42 . drwxr-xr-x 21 ubuntu ubuntu 520 Jun 10 03:25 .. -rw-rw-r-- 1 ubuntu ubuntu 0 Jun 10 00:57 .file5
移動檔案後,我們現在可以將隱藏檔案重新命名回其原始檔名。
/source_dir$ mv .file5 file5
使用感嘆號否定格式
第二種方法涉及使用感嘆號 (!) 作為不需要的檔名字首,並將其括在括號中。這告訴作業系統查詢除指定檔案以外的任何其他檔案。
$ mv SOURCE_DIRECTORY/!(unwanted_filename) TARGET_DIRECTORY
我們首先需要執行 shopt -s 命令來設定我們的 ~/.bashrc 配置檔案。這告訴 Linux 在命令中使用路徑時展開路徑。
$ set shopt -s extglob .bashrc $ mv source_dir/!(file5) target_dir/
使用反向 ls 搜尋
要從我們的系統中刪除不需要的檔案,我們只需使用帶有 -I 選項的 ls 命令。此命令顯示除您指定的檔案之外的所有其他檔案。此命令語句在封閉的反引號命令中執行。mV 命令將封閉操作的結果移動到目標目錄(或檔案)中。
/source_dir$ mv `ls -I file5` ~/target_dir/
除了反引號外,我們還可以使用子shell進行封閉。
/source_dir$ mv $(ls -I file5) ~/target_dir/
我們還可以使用命令 ls -l unwanted_file | grep -v '^d' 的輸出將反向檔名查詢的結果傳輸到目標目錄。
/source_dir$ ls -I file5 | xargs -i mv {} ~/target_dir/
使用反向 grep 搜尋
此技術使用 ls 顯示源目錄的內容,並將其透過名為“grep”的命令列工具進行管道傳輸。grape 命令使用不需要的檔案作為其索引來顯示所有其他檔案。反引號封閉並評估整個管道。之後,mv 命令將反引號封閉操作的檔名移動到目標目錄。
/source_dir$ mv `ls | grep -v file5` ~/target_dir/
作為反引號的替代方法,我們可以使用子shell進行封閉。
/source_dir$ mv $(ls | grep -v file5) ~/target_dir/
您還可以將 grep -v 'invert' 的輸出透過管道傳輸到 xargs -i 命令,該命令將反向搜尋的結果移動到目標資料夾。
/source_dir$ ls | grep -v file5 | xargs -i mv {} ~/target_dir
使用 sed 搜尋和替換
要從大量檔案中刪除特定不需要的文字字串,請使用反引號 (`) 括起 sed 命令,該命令搜尋不需要的文字,然後將該搜尋的輸出透過管道傳輸到另一個 sed 命令,該命令刪除不需要的文字。之後,mv 命令將列出的檔案結果移動到目標目錄。
/source_dir$ mv `echo * | sed s:file5::g` ~/target_dir/
作為反引號的替代方法,我們可以使用子shell進行封閉。
/source_dir$ mv $(echo * | sed s:file5::g) ~/target_dir/
您還可以使用 xargs 透過管道執行 sed 命令,方法是在 xargs 和 mv 之間包含花括號 ({})。您需要擴充套件該字串,以便 mv 可以對其進行評估。花括號(括號)用於評估新內容。
/source_dir$ echo * | sed s:file5::g | xargs -i {} mv {} ~/target_dir/
結論
我們已經介紹了幾種將檔案從一個位置複製到另一個位置的方法,但有一些例外。一開始,我們採用了一種字面上的方法,並將不需要的檔案重新命名為不可見的文字文件。稍後,我們檢查了使用感嘆號和插入符號來確定不需要的檔案。