In Linux, how to copy all the files not starting with a given string? In Linux, how to copy all the files not starting with a given string? unix unix

In Linux, how to copy all the files not starting with a given string?


A variation on Konrad answer, using cp option -t to specify target directory simplifies the last command. It creates a single cp process to copy all the files.

ls src_folder | grep -v '^String' | xargs cp -t dest_folder
  • list all files in src_folder
  • filter out all those that start with String
  • copy all remaining files to dest_dir


In bash:

shopt -s extglobcp src_folder/!(String*) dest_folder


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

This will

  • list all files in src_folder
  • filter out all those that start with String (so that the rest remains)
  • Invoke the cp command
    • once for each of those files (-n1 says to call cp for each of them separately)
    • using, as its arguments, % dest_folder, where % is replaced by the actual file name.