Unixのfindコマンドでディレクトリパス変数を使用する方法

Unixのfindコマンドでディレクトリパス変数を使用する方法

Findコマンドでディレクトリ名を渡すために変数を使用する方法を知る必要があります。以下のコマンドを使用していますが、動作しません。

while read -r directory file ;do
  echo "$directory"---this command works $HOME/data
  echo "$file"
  x="$(find $directory -type f -name "$file" -mtime -1 -printf "%f\n")"--not working
  echo $x
done < "$HOME/static_data.txt"

ループを介してディレクトリとファイル名を渡したいと思います。ただし、ディレクトリの場合、次のエラーが発生します。

'$HOME/data' no such file or directory 

そしてディレクトリを見ることができます。

ベストアンサー1

コマンドが「動作」してもecho "$directory"拡張されず、$HOME後で使用されません$directory

希望のディレクトリいいえ $HOME/data、ディレクトリが(文字通り)存在しません。あなたが望むのは$HOME(おそらく同様の)拡張です/home/user313150/data

evalを使用するとこの問題を克服できますが、evalevalは危険な可能性があるため、他の解決策を見つけることをお勧めします。

while read -r directory file; do
  directory=$(eval echo "$directory")
  echo "$directory"
  echo "$file"
  x="$(find "$directory" -type f -name "$file" -mtime -1 -printf "%f\n")"
  echo $x
done < "$HOME/static_data.txt"

おすすめ記事