#! /bin/bash
for i in {0..9} ;
do
mkdir -p "d$i "
for j in {0..9};
do
if [ -e "./f$i$j.txt" ];
then
echo 'Moving!'
mv "./f$i$j.txt" "./d$i/f$j.txt"
fi
done
done
Приведенный выше код предназначен для поиска в текущем рабочем каталоге любых файлов с именем f ##. Txt, где # - это номер, и упорядочивания их по каталогам таким образом, чтобы fAB.txt превратился в dA / fB.txt. Насколько я могу судить, он должен работать, однако при запуске кода я получаю следующую ошибку.
Moving!
mv: cannot move './f48.txt' to './d4/f8.txt': No such file or directory
Помимо этой ошибки, достаточно mv "$PWD/f$i$j.txt" "$PWD/d$i/f$j.txt"; Вам не следует запускать mv дважды.
Я не серьезно (с GNU tar): tar --remove-files -c f??.txt | tar -xv --transform 's|f\(.\)\(.\)|d\1/f\2|' --show-transformed-names
Опять же, вы создали d4 /, а не d4/.





Попробуй с этим.
удалены ненужные ";"
#! /bin/bash
for i in {0..9}
do
mkdir -p "d$i"
for j in {0..9}
do
if [ -e "./f$i$j.txt" ]
then
echo 'Moving!'
mv "./f$i$j.txt" "./d$i/f$j.txt"
fi
done
done
Все каталоги, которые вы создаете, имеют конечный пробел в своем имени, что означает, что если вы вводите оператор
if, вы фактически переименовываете каждый файл, а не перемещаете его в другой каталог.