ファイル名のナビゲーション、コピー、変換

ファイル名のナビゲーション、コピー、変換

私の問題:名前は同じですが、サブディレクトリに1レベルの深さで保存されたログファイルをコピーして名前を変更する必要があります。

複数のフォルダを含むLogfilesというフォルダからコピーしています。

W3SVC114、、、、W3SVC1507562355などW3SVC350179472

各フォルダには、次の名前のファイルが含まれています。u_ex[YYMMDD].logここで [YYMMDD] は日付スタンプです。

これらすべてのログファイルを1つのフォルダに配置する必要があります。すべての名前が同じなので、結果ファイル名にディレクトリ名を追加したいと思います。たとえば、次のようになります。

W3SVC1507562355/u_ex150407.log~になるW3SVC1507562355_u_ex150407.log

これらすべてが起こるようにするにはどうすればよいですか?少し過度ではありません...:-/

ベストアンサー1

ジッシュ名前付きzmvこれにより、ファイルを簡単に移動またはコピーし、パターンベースの変換を名前に適用できます。これをあなたのものに置きなさい.zshrc(またはコマンドラインで実行しなさい):

autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'

その後、次のコマンドを使用して名前変更レプリケーションを実行できます。

zcp 'Logfiles/(*)/(*.log)' 'destination_directory/${1}_$2'
zcp -w 'Logfiles/*/*.log' 'destination_directory/${1}_${2}.log'
zcp -W 'Logfiles/*/*.log' 'destination_directory/*_*.log'

zshをインストールしたくない場合は、ループを使用してすべてのシェルで同じことを実行できます。

cd Logfiles
for x in */*.log; do
  cp -- "$x" "destination_directory/${x%/*}_${x##*/}"
done

おすすめ記事