Bashスクリプトでネストしたファイルの名前を変更+移動

Bashスクリプトでネストしたファイルの名前を変更+移動

users各ユーザーの名前の付いたフォルダでいっぱいのディレクトリがあります。このフォルダにはという名前のファイルがあり、このファイルをuserinfo.csvフォルダから取り出してに入れようとしますusers。ユーザーフォルダ内のすべてのファイルはuserInfoと呼ばれるため、フォルダにそのユーザー名が含まれるように名前を変更したいと思います。以下を試しましたが、ユーザー名が完全なディレクトリな$dirので機能しません。私は名前をユーザー名に変更したくありません。名前を変更して移動するときは、ファイルや多くのusersエラーが残らないようにする必要があります。

どうすればこれを改善できますか?

# for every subdirectory, copy userinfo.csv to /users and rename to avoid confusion/errors
for dir in /path/to/users/*/; do
    (
        cd "$dir" && cp userinfo.csv _$("dir").csv && cp _$("dir").csv /path/to/users/
    )
done

ベストアンサー1

最終ファイル名にユーザー名が必要ない場合

for i in /path/to/users/*/userinfo.csv ; do
  mv $i /path/to/users/userinfo-$RANDOM.csv
done

あなたのユースケースに適していますか?

そうでない場合は、bashのパラメータ置換を使用することもできます。

for i in /path/to/users/*/userinfo.csv ; do
  mv $i /path/to/users/${i//\/-}
done

これにより、変数/(パス+ファイル名)のすべての内容が置き換えられます。たとえば、次のように終了します。-$i

/path/to/users/path-to-users-john-userinfo.csv
/path/to/users/path-to-users-jack-userinfo.csv

おすすめ記事