
ディレクトリには次のファイルがあります。
ルブロン_2018.txt ルブロン_2019.txt
melo_2018.log melo_2019_01.log
Wade_2018.bak Wade_2019_02.jpg
すべてのファイルには「_」区切り文字があり、プレフィックスに従ってファイルを別の新しいディレクトリにコピーしたいと思います。例えば
lebron_2018.txt lebron_2019.txt は \backup\lebron にコピーされます。
melo_2018.log melo_2019_01.log が \backup\melo にコピーされます。
wade_2018.bak wade_2019_02.jpg は \backup\wade にコピーされます。
cp lebron*.* \backup\lebron で実行できます。しかし、ファイル名を検索してファイル名に基づいてフォルダに自動的にコピーできますか?
答え1
@AdminBeeリンクされた投稿には良いアイデアがたくさんありますが、glob
使用できるパターンごとにループを実行するだけで正しいと感じます。
空白がないと仮定します。
for f in $(ls *_*.txt | cut -d_ -f1 | uniq); do
mkdir -p ./backup/$f;
cp $f_*.txt ./backup/$f/;
done
答え2
*nixシステムの場合、スラッシュの向きが間違っています。ファイル名にスペースや奇妙な文字が含まれていない場合は正常に動作します。
for FILE in *_*.txt ; do
DIR="/backup/${FILE//_*}"
mkdir -p "${DIR}" || continue
mv "${FILE}" "${DIR}"
done
bash変数拡張を使用してファイルから名前を削除してディレクトリを作成します。データの損失を防ぐためにディレクトリを作成できない項目をスキップして安全に保ちます。