パス変数にアスタリスクを追加しますか?

パス変数にアスタリスクを追加しますか?

*.*変数に保存されているパスの末尾で使用する必要があります。また、「*」1つだけでも大丈夫です。

最後に、同じ名前のフォルダにあるファイルを移動したいと思います。/share/test/temp/*forループなどの静的パスを使用すると機能します。これで別のユーザー名があり、forループの検索フォルダが変更されました。だから変数が必要です。これはうまくいきません:

    destDir= $Startdir/$username/
a=$destDir/*.*

for file in $a  ; do
  tmp=${file:0:4};
  filenew=${file%.*}"($tmp)";
  mkdir -- "$filenew";
  mv -- "$file" "$filenew";
done

エスケープ、一重引用符、二重引用符、バックティックを試しました。

a=$destDir/*.*      # not working
a="$destDir/\*"     # not working
a= $destDir'/\*'    # not working
a="$destDir/'\*.\*" # not working

forループで置き換えるアスタリスクを使用して通常の突き刺しをどのように作成できますか?それとも、パスを格納するforループに変数を渡すことができ、forはそのパス内のすべてのファイルを検索する必要があることを知っている他のオプションはありますか?

私はforループを好むfind $destDir -name ..

ベストアンサー1

スクリプトにはいくつかの障害があります。そのうちのいくつかはすぐに思い浮かぶ。

  1. スクリプト行で: "for file in $a; do" $a の *s は、期待どおりにシェルによって解釈されず、文字通り使用されます。

  2. *.*と*は同じではありません。 *.*にはファイル名にドットが必要ですが、*にはドットは必要ありません。

次のように単純化されたスクリプトを確認してください。

destDir=$HOME
a=$destDir/*
for file in $a;  do echo $file;  done

警告:ファイル名にスペースが含まれている場合、forループはそれを2つ以上のファイル名に分割します。

/share/test/temp/* が適切な場合(ファイル名にスペースがないことを意味する)、次のようにすることをお勧めします。

for file in $destdir/*;  do ...yourstuff...; done

空白がある場合は、次のことを試すことができます。

find $destDir -type f | while read file;  do ...yourstuff...;  done

おすすめ記事