0

配列内のファイルとディレクトリの組み合わせを最適に処理するにはどうすればよいですか。ファイルとフォルダーの配列を作成し、配列をループして、配列内の各アイテムに-rfオプションを指定したrmコマンドを実行する必要があります。

#Build array of files to be deleted

FILES=(
"~/Library/Preferences/Adobe InDesign"
"~/Library/Caches/Adobe InDesign"
"~/Library/Saved Application State/com.adobe.InDesign.savedstate"
)


#Loop through array deleting each file/directory with the recursive force options

    for i in "${FILES[@]}"

      do

        rm -rf "$i"

      done

    exit
4

2 に答える 2

2

問題は配列やスペースではなく~、ファイルパスにあります。~は実際にはパスの有効な部分ではありませんが、シェルはそれをホームディレクトリのパスに置き換えます...引用符で囲まれていない限り:

$ echo ~/Library/Preferences/Adobe InDesign
/Users/gordon/Library/Preferences/Adobe InDesign
$ echo "~/Library/Preferences/Adobe InDesign"
~/Library/Preferences/Adobe InDesign

~したがって、引用符の外側に置くことができます。

FILES=(
~/"Library/Preferences/Adobe InDesign"
~/"Library/Caches/Adobe InDesign"
~/"Library/Saved Application State/com.adobe.InDesign.savedstate"
)

または、$ HOME(二重引用符で置き換えられます)を使用します。

FILES=(
"$HOME/Library/Preferences/Adobe InDesign"
"$HOME/Library/Caches/Adobe InDesign"
"$HOME/Library/Saved Application State/com.adobe.InDesign.savedstate"
)
于 2012-09-27T22:35:54.417 に答える
0

私は時々このトリックを使用しました:

with_expanded_paths()
{
  typeset IFS
  IFS=""
  "$@"
}
with_expanded_paths rm -rf "~/file with spaces"

私はそれをメモリから書いたので、わずかな調整が必要になるかもしれません。

于 2012-09-27T20:11:59.763 に答える