В Linux, как скопировать все файлы, не начинающиеся с заданной строке?

Я попытался выполнить следующую команду:

cp src_folder/[!String]* dest_folder

однако эта команда скопирует все файлы, которые не начинаются ни с одного из символов "S", "t", "r", "i", "n", " g "вместо копирования файлов, которые не начинаются с "String".

4 ответов


вариант ответа Конрада, используя cp опции -t чтобы указать целевой каталог, упрощает последнюю команду. Он создает один cp процесс копирования всех файлов.

ls src_folder | grep -v '^String' | xargs cp -t dest_folder
  • список всех файлов в src_folder
  • отфильтровать все те, которые начинаются с String
  • скопировать все оставшиеся файлы dest_dir

в bash:

shopt -s extglob
cp src_folder/!(String*) dest_folder

ls src_folder | grep -v '^String' | xargs -J % -n1 cp % dest_folder

это

  • список всех файлов в src_folder
  • отфильтровать все те, которые начинаются с String (Так что остальное остается)
  • вызов
    • один раз для каждого из этих файлов (-n1 говорит называть cp для каждого из них в отдельности)
    • используя в качестве аргументов % dest_folder, где % заменяется фактическим именем файла.

cp src_folder/!(String*) dest_folder

попробовать, что - Крис!--2-->