Хотя общая проблема идентификации расширений сложна, можно немного почистить скрипт:
найти
, чтобы рассматривать файлы только с расширением: -имя '*.*'
awk
вместо cut
ting себе:find
для выполнения этого скрипта. Таким образом: скрипт, названный, скажем, move.sh
:
#! /bin/bash
for i
do
ext=/some/where/else/$(awk -F. '{print $NF}' <<<"$i")
mkdir -p "$ext"
mv "$i" "$ext"
done
Затем запустите find
таким образом:
find . -name '*.*' -type f -exec move.sh {} +
Проблема в том, что вы не можете переставить все файлы в папке, поэтому вы можете использовать xargs
:
find . -name '*.*' -type f -print0 > /tmp/temp
xargs -0 move.sh < /tmp/tmp
Я не слишком уверен в эффективности, но другой подход будет заключаться в том, чтобы получить все расширения, а затем переместить все файлы, вовлеченные в процесс одним махом.
Что-то вроде:
find . -name '*.*' -type f -print0 | sed -z 's/.*\.//g' | sort -zu > /tmp/file-exts
Это должно дать вам список уникальных расширений файлов. Тогда наш move.sh
будет выглядеть так:
#!/bin/bash
for i
do
mkdir -p "$i"
find . -name "*.$i" -type f -exec mv -t "$i" {} +
done
И мы запустим его:
xargs -0 move.sh < /tmp/file-exts
Я делаю довольно много предположений в этом посте, таких как sed
и sort
, поддерживающих -z
(позволяя им работать с NUL-терминированными строками, которые находят
и xargs
процветают).
. Начиная с имени Slash или протокола) Подстановка «.
Я не знаю, в каком каталоге своей .htaccess жизни, но вы должны удалить префикс для этого каталога:
RewriteRule ^path1/path2/([0-9]+)$ /search?q=$1 [L,R=301]
... или ...
RewriteRule ^path2/([0-9]+)$ /search?q=$1 [L,R=301]
... или ...
RewriteRule ^([0-9]+)$ /search?q=$1 [L,R=301]