У меня есть много файлов csv, которые я хочу классифицировать в соответствии с их именем в разных папках.
Файлы, называемые *lefto.csv, будут сохранены в папке с именем lefto Файлы, названные *righto.csv будут сохранены в папке с именем right. Файлы, названные *sagital.csv, будут сохранены в папке с именем sagittal Файлы с именами, не подчиняющимися никакому предыдущему условию, будут сохранены в папке с именем animalsДо сих пор я использовал команду mv, но хотел бы сделать цикл.
Похоже, инструкция case будет уместна. Это должно работать в bash или других оболочках типа Bourne:
for f in *.csv; do
case "${f%.csv}" in
*.lefto) echo mv -- "$f" lefto/
;;
*.righto) echo mv -- "$f" righto/
;;
*.sagital) echo mv -- "$f" sagital/
;;
*) echo mv -- "$f" animals/
;;
esac
done
Тестирование:
touch foo.lefto.csv bar.righto.csv baz.csv foo.sagital.csv
then
mv -- bar.righto.csv righto/
mv -- baz.csv animals/
mv -- foo.lefto.csv lefto/
mv -- foo.sagital.csv sagital/
Удалите echo когда вы убеждены, что он делает то, что вы хотите
Вы можете сделать что-то вроде этого:
mkdir -p lefto righto sagital
for prefix in lefto righto sagital; do
mv -- *"$prefix.csv" $prefix/
done
mv -- *.csv animals/
Похоже, инструкция case будет уместна. Это должно работать в bash или других оболочках типа Bourne:
for f in *.csv; do
case "${f%.csv}" in
*.lefto) echo mv -- "$f" lefto/
;;
*.righto) echo mv -- "$f" righto/
;;
*.sagital) echo mv -- "$f" sagital/
;;
*) echo mv -- "$f" animals/
;;
esac
done
Тестирование:
touch foo.lefto.csv bar.righto.csv baz.csv foo.sagital.csv
then
mv -- bar.righto.csv righto/
mv -- baz.csv animals/
mv -- foo.lefto.csv lefto/
mv -- foo.sagital.csv sagital/
Удалите echo когда вы убеждены, что он делает то, что вы хотите
Вы можете сделать что-то вроде этого:
mkdir -p lefto righto sagital
for prefix in lefto righto sagital; do
mv -- *"$prefix.csv" $prefix/
done
mv -- *.csv animals/