Cp

複製所有非文本文件

  • April 26, 2021

我需要通過 cp 命令將一個文件夾中所有不以 .txt、.cpp 和 .h 副檔名結尾的文件移動到一個單獨的文件夾中。

有沒有內置的方法可以做到這一點,還是我需要製作一個腳本?

這完全取決於您需要的穩健性。其中一些想法(例如 -print0)並非在所有系統上都可用,因此 YMMV。

快速,一次性需要幾個文件:

  1. mkdir .tmp
  2. mv *.txt *.cpp *.h .tmp
  3. mv * /separate_folder/
  4. mv .tmp/* .
  5. rmdir .tmp

當然,這是一個 hack,但它不會佔用 I/O,只需幾秒鐘即可完成,並且是可移植的。

對於處理許多文件:

find . -maxdepth 1 -type f ! -name '*.txt' ! -name '*.cpp' ! -name '*.h' -print0 | xargs -0 mv -t /separate_folder/

如果您的文件名不包含空格或其他奇怪的字元,您可能可以省略-print0and -0(因此依賴於預設-print邏輯)。

如果使用 Bash

有關GLOBIGNORE變數“限制匹配模式的文件名集”的變數,請參見 Bash 手冊頁,以及!(pattern-list)“匹配除給定模式之一之外的任何內容”的變數。

引用自:https://unix.stackexchange.com/questions/646822