Apache: перепишите правило с переменными данными

Хотя общая проблема идентификации расширений сложна, можно немного почистить скрипт:

  1. Скажите найти , чтобы рассматривать файлы только с расширением: -имя '*.*'
  2. Используйте awk вместо cutting себе:
  3. Используйте скрипт, а затем скажите 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 процветают).

0
01.07.2016, 14:36
1 ответ

. Начиная с имени 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]
2
28.01.2020, 02:36

Теги

Похожие вопросы