Portál AbcLinuxu, 1. května 2025 14:04
Při kopírování hudby na flash disk mi vadilo, že přehrávání pak neprobíhalo popořadě, ale na přeskáčku, jak se zrovna soubory nahrály na flash, tak jsem napsal jednoduchý script na třídění.
#!/bin/bash
path=$1
if [ "$path" == "" ]; then
echo "Usage: $0 path_to_sort_by_name"
exit 1
fi
defrag_dir="$path/.defrag"
if [ ! -d "$defrag_dir" ]; then
mkdir "$defrag_dir"
fi
escpath=`echo $path| sed 's/\//\\\\\//g'`
OLDIFS=$IFS
IFS=:
dirs=`find "$path" -mindepth 1 -type d ! -iname .defrag | sort | sed -e :a -e "N;s/\n/$IFS/;ta"`
topdirs=`find "$path" -mindepth 1 -maxdepth 1 -type d ! -iname .defrag | sort | sed -e :a -e "N;s/\n/$IFS/;ta"`
for dir in $dirs ; do
dirname=`echo $dir | sed "s/^$escpath//"`
echo $topdirs | grep $dir >/dev/null
if [ $? -eq 0 ]; then
mv "$dir" "$path/.defrag/$dirname" > /dev/null
fi
mkdir "$path/$dirname" > /dev/null
files=`find "$path/.defrag/$dirname" -maxdepth 1 ! -type d | sort | sed -e :a -e "N;s/\n/$IFS/;ta"`
for file in $files ; do
mv "$file" "$path/$dirname/"
done
done
IFS=$OLDIFS
rm -r "$defrag_dir" >/dev/null
Doufám, že tento script bude někomu k prospěchu a že mu nezpůsobí žádné škody
Tiskni
Sdílej:
find -type d|while read i;do (cd "$i";mkdir ../d;mv * ../d;rm -rf "$PWD";mv "${PWD%/*}/d" "$PWD"); doneVyzkoušel jsem tohle, a funguje..
rm -rf
z nějakého ujetého důvodu odmítá smazat aktuální adresář, ale proti $PWD
naštěstí neprotestuje...
mv
by měl expandovat hvězdičku na abecední seznam souborů, a v tomto pořadí je přesundou do cílového adresáře, takže by to řadit měl. Jediné co nebude fungovat je pokus o třídění root dir filesystému- pak budou . a ../d v jiných mountech, a mv
by je kopíroval, nebo by to vůbec nefungovalo..
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.