私の問題:名前は同じですが、サブディレクトリに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