サブセット内の各ディレクトリで動作するbashスクリプトを作成しようとしています。残念ながら、パスにスペースが含まれているため、名前を変更できません。
ループはfor
すべてのスペースで中断を必要とします。何十ものバリエーションを試しましたが、解決策が見つかりませんでした。
簡略化されたバージョンは次のとおりです。
#!/bin/bash
SOURCE="/Volumes/Time Machine Backups/Backups.backupdb/Zaphod"
for file in `ls -d "$SOURCE"/201*`
do
echo "File: $file"
done
/Volumes/Time Machine Backups/Backups.backupdb/Zaphod/2017-06-30-215735
たとえば、別の変数から各項目を取得する方法を提案できる人はいますか?
ベストアンサー1
最小限に変更される解決策は次のとおりです。
#!/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: {}" \;