групповые файлы в папках по именам

У меня есть папка со многими файлами вроде:

20_1_A.xml, 20_2_A.xml, 20_3_A.xml, ... 10_1_A.xml, 10_2_A.xml, 10_3_A.xml, ... 20_1_A.csv, 20_2_A.csv, 20_3_A.csv, ... 10_1_A.csv, 10_1_A.csv, 10_3_A.csv, ... 

Я хочу сгруппировать файлы по первому номеру в имени с помощью команд оболочки. Например:

  • все файлы, начиная с 20 в папке с именем 20, и все файлы, начиная с 10 в папке с именем 10. Тип файла не имеет значения.

Кто-нибудь знает, как это сделать? Я думал об использовании подстановочных знаков, но я не знаю, как …

3 Solutions collect form web for “групповые файлы в папках по именам”

Подстановочные знаки – правильный инструмент. Вы можете переместить все файлы следующим образом:

 for i in {10,20} # or something like $(seq 10 10 90) instead of {10,20} if you have a lot of different prefixes do mkdir -p "$i" && mv "$i"* "$i"/ done 

Вы хотите mkdir -p чтобы mkdir не жаловался, если целевой каталог уже существует.

 for datei in *_*.xml *_*.csv; do mkdir -p -- "${datei%%_*}" && mv -- "$datei" "${datei%%_*}" done 

Для каждого файла, соответствующего шаблонам, создайте dir, названный частью перед первым подчеркиванием (если он еще не существует, -p ) и переместите туда файл.

Надеюсь, это подходит.

С zsh :

 mkdir_and_move() {mkdir -p -- $2:h && mv -- "$@"} autoload zmv zmv -P mkdir_and_move '(<->)*.(csv|xml)(#q.)' '$1/$f' 

<-> – это glob, который соответствует любому десятичному целому числу ( <xy> – целые числа от x до y ). (#q.) является квалификатором glob, который выбирает только обычные файлы.

Подобно тому, что вы делаете с циклом, за исключением того, что zmv добавляет несколько проверок здравомыслия.

  • Атомное удаление каталога
  • Перемещение нескольких файлов из каталога в другой с помощью заметной ошибки
  • Mac: самый простой способ перемещения нескольких дубликатов имен файлов в один каталог
  • gunzip и создавать каталоги, следующие за именем zip-файла
  • Помогла ли моя команда $ mv '* .mobi' соединить мои файлы?
  • Попытался переместить файл с помощью команды mv и теперь он потерян?
  • Как переименовать файл в ... (точка точка)?
  • Повреждение файлов с использованием rsync, нескольких процессов rsync, перемещение / переименование исходного файла
  • Линейные системные файлы перемещены, как вернуться при загрузке с установщика?
  • Переименуйте набор файлов с шаблоном <имя> .1.gz.html в <имя> .html
  • Почему mv не может иметь дело с существованием каталога с одним именем в месте назначения?
  • находить файлы по имени и перемещать их с одновременным переименованием
  • Linux и Unix - лучшая ОС в мире.