引用符でフォルダを扱うことができない見つけるには:シェルスクリプト:私は、次のシェルスクリプトで問題に直面しています
#!/bin/bash
searchPattern=".*\/.*\.abc|.*\/.*\.xyz|.*\/.*\.[0-9]{3}"
subFolders=$(find -E * -type d -regex ".*201[0-4][0-1][0-9].*|.*20150[1-6].*" -maxdepth 0 | sed 's/.*/"&"/')
echo "subFolders: $subFolders"
# iterate through subfolders
for thisFolder in $subFolders
do
echo "The current subfolder is: $thisFolder"
find -E $thisFolder -type f -iregex $searchPattern -maxdepth 1 -print0 | xargs -0 7z a -mx=9 -uz1 -x!.DS_Store ${thisFolder}/${thisFolder}_data.7z
done
その背後にある考え方は終了.abc、.xyzというとでファイルタイプをアーカイブすることです。 000〜.999をサブフォルダごとに1つの7zアーカイブに保存します。しかし、私はスペースを含むフォルダを扱うことはできません。上記のように、私は、スクリプトを実行すると、私はいつも次のエラーを取得する:
find: "20130117_test": No such file or directory
私は
subFolders=$(find -E * -type d -regex ".*201[0-4][0-1][0-9].*|.*20150[1-6].*" -maxdepth 0)
スクリプトのような作品に変えライン
subFolders=$(find -E * -type d -regex ".*201[0-4][0-1][0-9].*|.*20150[1-6].*" -maxdepth 0 | sed 's/.*/"&"/')
でスクリプトを実行した場合魅力的ですが、スペースを含むフォルダには当てはまりません。中
find -E "20130117_test" -type f -iregex ".*\/.*\.abc|.*\/.*\.xyz|.*\/.*\.[0-9]{3}" -maxdepth 1 -print0 | xargs -0 7z a -mx=9 -uz1 -x!.DS_Store "20130117_test"/"20130117_test"_data.7z
私は問題が何らかの形で(引用符で)フォルダのリストの保存に関連している知っている:
不思議なことに、私はシェルで直接次の行を実行すると、予想通り、それは動作します変数のサブフォルダが、私は単純にそれを正しく動作させるための方法を見つけることができません。
私はシェルで、より高度な誰かがここで私を助けることができると思います。一般的に
内側(GNU)の出力にループに標準的な方法がないフォルダを作成しないように7Zに指示 'find'である:' IFSは= -r -d 'を読んでいる間' ファイル名; "$ filename"で何か... ...; done <<(find .... -print0) 'となります。 [ParsingLs](http://mywiki.wooledge.org/ParsingLs)を参照してください(このページを読んで、このサイトで利用可能なすべての情報を読んでください)。 –
@gniourf_gniourfアドバイスありがとう! – zionlion
リテラル引用符(あなたのスクリプトが処理するデータの引用符)は、構文引用符(スクリプト自体の引用符)を代用することはできません。 [BashFAQ#50](http://mywiki.wooledge.org/BashFAQ/050)を参照してください。 –