Bash - получить строку, содержащую пробелы в цикле for [дубликат]

sklearn и matplotlib полезны для машинного обучения. Знание numpy и scipy может пригодиться. Один совет: не создавайте просто документацию и начинайте изучать различные функции и классы, если вы не знакомы с теорией по этой конкретной теме. Модули довольно большие. В противном случае ищите инструменты в этих модулях на ходу, когда вы узнаете о них в классе.

1
07.07.2017, 01:49
2 ответа

Если нет пробелов в файлах в каталоге:

#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
cd "$SOURCE"
for file in $(ls -d./201*)
do
    echo "File: $file"
done

если вы не уверены, есть пробелы в списке каталогов или нет, сделайте это вместо этого:

#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
cd "$SOURCE"
shopt -s nullglob
for filename in 201*;do
   if [[ ! -d "$filename" ]];then
      echo "$filename"
   fi
done
shopt -u nullglob

Я не понимаю, нужны ли вам имена файлов каталогов или нет, если нет, то это то, что работает.

Второе обычно является предпочтительным решением, когда вы не знаете, есть пробелы или нет, как мне кажется.

0
27.01.2020, 23:33

Решение с наименьшими изменениями:

#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
for file in "$SOURCE"/201*
do
    echo "File: $file"
done

Альтернативный вариант (, если у вас нет проблем с изменением позиционных параметров):

#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
set -- "$SOURCE"/201*
for file; do
    echo "File: $file"
done

Более точное решение, которое избегает каталогов и работает с файлами с пробелами (, но не с новыми строками):

ls -dp "$a"/201* | grep -v '/$' | 
    while read f; do echo "File:$f"; done

Или решение, которое работает для любого имени, но также может отображать точечные -файлы (, если имя совпадает):

find "$a" -type f -name "201*" -exec echo "File: {}" \;
2
27.01.2020, 23:33

Теги

Похожие вопросы