Я новичок в сценариях bash и Linux, и у меня есть папки только с датами, например

2012-11-20
2012-11-21
2012-11-22
2012-11-23

И у меня есть файлы с именем data_11202012_randomnumbers_csv.

Я хотел бы создать сценарий, который может перемещать каждый файл csv в правильную папку, сопоставляя дату в файле с папкой.

Я только что набираю mv file path, но у меня сотни файлов, и мне интересно, есть ли способ попроще.

Любая помощь была бы признательна.

0
Danish M 11 Май 2021 в 13:57

1 ответ

Лучший ответ

Следующее должно сделать это за вас. Поясню с комментариями

for file in your_folder/*; do
  # 1. Extract the numbers from the file name
  dir="${file#data_}" # remove data_ prefix
  dir="${dir%%_*}" # remove everything after first _

  # 2. Rearrange the numbers into the desired format
  dir="${dir:2:4}-${dir:0:2}-${dir:6:2}"
  
  # 3. Move the file into the directory
  mv f dir
done

Здесь у вас есть очень полезная шпаргалка по bash, где вы можете узнать о ней больше. Он иллюстрирует все расширения переменных, которые я сделал в своем фрагменте, и многое другое.

1
Miguel 11 Май 2021 в 12:03