0

mktemp に問題があります。私はスクリプトを書きました:

tempdir=$(mktemp -t -d mytemp.XXXXXX)

mv ~/Desktop/File_Converted/* "$tempdir"

cd $tempdir

for f in *; do

    Some stuff...

done

実行すると、次のようになります。

$ ~/Desktop/script.sh 
mv: rename /Users/user/Desktop/File_Converted/* to /var/folders/xE/xEV9UA-AFpOdJkN2IrTAArI6Gs/-Tmp-/-d.eiXRhaHY\nmytemp.caNEzp: No such file or directory
/Users/user/Desktop/script.sh: line 21: cd: /var/folders/xE/xEV9UA-AFpOdJkN2IrTAArI6Gs+/-Tmp-/-d.eiXRhaHY: Not a directory

私が間違ったことを見つけることができないようです。何か助けてください。

ありがとう!

ダン

4

3 に答える 3

3

あなたはあなた-tとあなたの-d混乱を持っています。

mktempへの-t引数は引数を取り、あなたの場合はそれを取り-dます。そのため、ディレクトリではなくファイル名を取得していて、mv失敗しています。

mktempが目的のテンプレート(mytemp.XXXXXX)を取得し、それに基づいて一時的な名前を生成しているため、エラーは非常に混乱します。\nエラーメッセージにが表示されるのはそのためです。mktempからの出力は実際には2行の長さでした。

関連するドキュメント:

mktemp [ -d ] [ -q ] [ -tprefix ][- u ]テンプレート..。

-d ファイルの代わりにディレクトリを作成します。

-t prefix
(提供されたプレフィックスと設定されている場合はTMPDIRを使用して)テンプレートを生成し、ファイル名テンプレートを作成します。

あなたのコメントによると、
デバッグのために、私はの値を印刷し$tempdirて、それがあなたが期待するものであるかどうかを確認することをお勧めします。まだ2つのmvエラーが発生しているように見えるということは、何かがおかしいことを私に示唆しています。

エラーが発生した後にスクリプトを停止させるbashコマンドも、このset -eような問題を追跡するのに非常に便利です。

于 2012-06-08T21:33:28.093 に答える
1

最初のエラー ( mv: rename /Users/user/Desktop/File_Converted/* to ...) に基づくと/Users/user/Desktop/File_Converted、空である可能性があるため、グロブはファイルのリストに展開するのではなく、リテラル文字列として扱われています。

編集: 以下のコメントを見ると、tiff ファイルの名前にスペースがあることに気付きました:

Dan-Dows-MacBook-Pro:tmp ddow$ ls ~/Desktop/File_Converted/ inbox.tiff

それは問題を引き起こすでしょう。あなたのシングルmvをこれに置き換えてください:

files_to_move=(~/Desktop/File_Converted/*)
mv "${files_to_move[@]}" $tempdir.

最初の行は、各要素が のファイル名である配列変数を作成し、File_Converted各ファイル名のスペースは適切に保持されます。2 行目では、引用符で囲まれたパラメーター展開を使用してファイル名のリストに展開し (ここでも、単語分割後にファイル名のスペースを適切に保持します)、それらは に移動され$tempdirます。

于 2012-06-08T21:54:32.653 に答える
0

mktempOSXでは少し違うと思います。接頭辞 で一時ディレクトリを作成しようとして$TMPDIRecho $TMPDIRます。/var/folders/...

たとえば、使用するだけですmktemp /tmp/mytemp.XXXXXX

于 2012-06-08T21:58:07.947 に答える