すべてのxlsxファイルを元のファイル名を含む新しいディレクトリに繰り返し抽出します。

すべてのxlsxファイルを元のファイル名を含む新しいディレクトリに繰り返し抽出します。

各xlsxに対して抽出されたすべてのファイルの新しいディレクトリ名でディレクトリ/ファイル名を保持しながら、すべてのサブディレクトリから繰り返し抽出したいExcelファイルがたくさんあります。

私が見つけたファイルを抽出してください。これ。残念ながら、私のbashの知識には、1つのコマンドですべてのことを実行できる技術が欠けています。

だから最初にそれをより小さな部分に分割しようとします。

for z in ./*
do name="${z%%_*}"; dest=".${name//[ .-]/}"; mkdir "$dest";
done

私がしよう*とすると

for z in ./*

現在のディレクトリ内のすべてのファイルを検索し、予想とは異なる結果を取得します。

find . -name "*.xlsx"

だから私はそれを元に戻すことができるかどうかを試してみます。

for f in | find . -name "*.xlsx"; do d="${f}"; mkdir -p "$d"

しかし、私のパイプラインが間違っているので、明らかに動作しません。

答え1

bashあなたの別れが正しいのかわからない。

ずっと前にbashの使用をやめたからです。

しかし、ループからfindの出力が必要な場合は、次のことを試してください。

find . -name '*.xlsx' -print0 |
    while IFS= read -r -d $'\0' z; do
        name="${z%%_*}" 
        dest=".${name//[ .-]/}" 
        mkdir "$dest"
    done

関連情報