2012-06-20 3 views
0

я могу использовать следующее, чтобы получить содержимое папки без пробелов:BASH - Как получить содержимое папки с пробелом в имени?

files=~/Movies/MyFolder/MySubfolder*

Но следующий не работает, если папка содержит пробел имя:

files=~/Movies/My\ Folder/My\ Subfolder/*

Я пытаюсь повторить из содержимого папки следующим образом:

for f in "$files" 
do 
    echo "$f" 
done 

Я также попытался поставить кавычки вокруг пути:

files=~/"Movies/My Folder/My Subfolder"/*

Спасибо за ваше время.

+0

Что ты пытаясь * сделать * с этим списком файлов? – ghoti

+0

Ну эхо было только для тестирования, но мой скрипт заканчивает использовать FFMPEG для создания файлов миниатюр для XBMC, так как они являются домашними видео и поэтому не могут втянуться из TheTVDB :) – squarefrog

ответ

0
#Works better, and recursively. 
find ~/"Movies/My Folder/My Subfolder" -iname \*jpg | while read f ; do 
    echo $f 
done 
+0

Может ли это быть адаптировано для поиска определенных файлов? Например. * .jpg * .png и т. д. – squarefrog

+0

Могу ли я просто использовать Grep в конце этого заявления ls? – squarefrog

+0

ls "~/Фильмы/Моя папка/Моя подпапка/* jpg" или лучше, используйте find :-) –

0

Использование массива:

shopt -s nullglob # If the folder is empty, don't treat * literally 
files=(~/Movies/My\ Folder/My\ Subfolder/*) 
for f in "${files[@]}"; do 
    echo $f 
done 

или, как говорит Денис, просто перебрать Glob непосредственно (который я ошибочно думал, что не будет работать):

shopt -s nullglob 
for f in ~/Movies/My\ Folder/My\ Subfolder/*; do 
    echo $f 
done 
+2

Нет необходимости в массиве, просто перебирайте по glob напрямую. –

+0

Это может работать или не работать. Я создал пустую папку для проверки «Karthiks-MacBook-Air»: ~ karthik $ files = (~/Movies/My \ Folder/My \ Subfolder/*) Karthiks-MacBook-Air: ~ karthik $ for f in "$ {файлы [@]} "; do > echo $ f > сделано /Пользователи/karthik/Фильмы/Моя папка/Моя подпапка/* ' –

+1

Если папка пуста, glob будет обрабатываться буквально. Вы можете выполнить «shopt -s nullglob», чтобы вместо этого glob сгенерировал пустой список. – chepner

Смежные вопросы