同じサフィックス(0から310まで)を持つファイルとディレクトリがあります。file(0)
にコピーしdirectory(0)
てfile(10)
までdirectory(10)
続けfile(310)
たいですdirectory(310)
。
一度にコピーする方法はありませんか?
答え1
ファイルを繰り返してそのディレクトリに移動します。
for FILE in *; do
if [[ -f "$FILE" ]]; then
echo mv "$FILE" "dir${FILE##file}";
fi
done
if [[ -f "$FILE" ]]; then
、ディレクトリではなくファイル$FILE
であることを確認してください。-f
-d
${FILE##file}
、(最後のプレフィックスまで切り取る)は、file
ファイル名からプレフィックスを削除し、数字部分のみを保持します。echo
実際に動く前に練習する必要があります。
出力例:
file0 --> dir0
file1 --> dir1
file2 --> dir2
file3 --> dir3
修正する:
ファイル名に同様のサフィックスがある場合は、file##.xyz
次のスクリプトを使用できます。
for FILE in *; do
if [[ -f "$FILE" ]]; then
dname="${FILE##file}";
echo mv "$FILE" "dir${dname%.inp}";
fi
done
${dname%.inp}
コードのこの部分(最初のサフィックスに切り捨てる)は、前にプレフィックスを削除した.inp
ファイル名の末尾を削除するため、数値部分のみが生成されます。${FILE##file}
file
または、以下のように使用することもできます。
for FILE in *; do
if [[ -f "$FILE" ]]; then
echo mv "$FILE" "dir${FILE//[^0-9]/}";
fi
done