0

私の条件は、dirが存在する場合は正しく機能しますが、存在しない場合は、thenandelseステートメントの両方を実行しているように見えます(これは正しい用語ですか?)。

script.sh

#!/bin/bash
if [[ $(find path/to/dir/*[^thisdir] -type d -maxdepth 0) ]]
  then
    find path/to/dir/*[^thisdir] -type d -maxdepth 0 -exec mv {} new/location \;
    echo "Huzzah!"
  else
    echo "hey hey hey"
fi

プロンプト
最初の呼び出しでは、dirsがあります。2番目に、それらは最初の呼び出しから移動されました。

$ sh script.sh
Huzzah!
$ sh script.sh
find: path/to/dir/*[^thisdir]: No such file or directory
hey hey hey

どうすればこれを修正できますか?

提案を試しました

if [[ -d $(path/to/dir/*[^thisdir]) ]]
  then
    find path/to/dir/*[^thisdir] -type d -maxdepth 0 -exec mv {} statamic-1.3-personal/admin/themes \;
    echo "Huzzah!"
  else
    echo "hey hey hey"
fi

結果

$ sh script.sh
script.sh: line 1: path/to/dir/one_of_the_dirs_to_be_moved: is a directory
hey hey hey
4

4 に答える 4

2

いくつかのエラーがあるようです:

まず、パターンは、 *すべてのファイル名が、、、、、またはで終わる平均と同じ方法でpath/to/dir/*[^thisdir]bashで解釈されます。path/to/dir/*[^dihstr]dihst r

このdir(path/to/dir)で何かを検索しているがpath/to/dir/thisdir、ではなく、n番目のサブディレクトリfindではない場合よりも、禁止して次のように書くことができます。

編集:私のサンプルにもエラーがありました:[ -e $var ]間違っていました。

declare -a files=( path/to/dir/!(thisdir) )
if [ -e $files ] ;then
    mv -t newlocation "${files[@]}"
    echo "Huzzah!"
else
    echo "hey hey hey"
fi

subirsで検索する必要がある場合はfind、サンプルや詳細な説明を提供してください。

于 2012-11-11T10:13:17.040 に答える
1

エラーはおそらくで発生しif [[ $(find path/to/dir/*[^thisdir] -type d -maxdepth 0) ]]ていて、エラーが見つかったために他の場所に移動します。

findそのディレクトリパラメータが存在することを望んでいます。あなたがやろうとしていることに基づいて、あなたはおそらく考慮すべきです

$(find path/to/dir/ -name "appropriate name pattern" -type d -maxdepth 1)

また、で実際の論理関数を使用することを検討しifます。ファイルの条件については、これを参照してください。

于 2012-11-11T01:03:45.927 に答える
0

#!/bin/bashこの投稿で推奨されているように、最初の行にを追加して、スクリプトを実行しているのがbashであることを確認してください。

ifとelseの両方が実行されるのはなぜですか?

于 2012-11-11T01:09:42.080 に答える
0

OPは、 thisdirを除くすべてのファイルを新しい場所に移動したいと考えています。

を使用した解決策は、シェル拡張を使用するのではなく、の機能の使用findを除外することです。thisdirfindbash

#!/bin/bash
if [[ $(find path/to/directory/* -maxdepth 0 -type d -not -name 'thisdir') ]]
    then
        find path/to/directory/* -maxdepth 0 -type d -not -name 'thisdir' -exec mv {} new/location \;
        echo "Huzzah!"
    else
        echo "hey hey hey"
fi

これはテスト済みで、bashバージョン4.2.39およびGNUfindutilsv4.5.10で動作します。

于 2012-11-11T10:24:37.980 に答える