Я никогда не использовал комаров, таким образом, трудно сказать что точно edit-pr
ожидание должно быть сделано. Но от того, что Вы дали нам, Вы могли попытаться заменить ENV РЕДАКТОРА к пользовательскому сценарию оболочки, или возможно даже сценарию Python или чему-то.
EDITOR=/path/to/script.(sh|py) edit-pr <args>
Но как я сказал, я не знаю, какие редактирования это хочет, или что потребности быть сделанным в редакторе. Возможно, если бы Вы дали нам пример того, что Вы хотели бы автоматизировать?
find . -type f |
shuf | # shuffle the input lines, i.e. apply a random permutation
nl -n rz | # add line numbers 000001, …
while read -r number name; do
ext=${name##*/} # try to retain the file name extension
case $ext in
*.*) ext=.${ext##*.};;
*) ext=;;
esac
mv "$name" "../randomized/${name%/*}/$number$ext"
done
Замена mv
ln
или ln -s
и возможно другой целевой каталог, как Вы считаете целесообразным. Обратите внимание на это с тех пор find
может все еще пересекать каталог к этому времени mv
выполнения, Вы не должны переименовывать или связывать файл в том же каталоге.
shuf
характерно для GNU coreutils, остальное - POSIX. Если Вы не находитесь на Linux или Cygwin, посмотрите альтернативы в awk или Perl.
Нет ничего Unix, конкретного здесь...
import random, os
input_path = "/home/badp/Youtube/" #absolute path for simplicity
output_path = "./playlist"
files = os.listdir(input_path) #assume all files in the same folder for simplicity
random.shuffle(files)
os.mkdir(output_path)
os.chdir(output_path)
i = 0
for filename in files:
os.link( os.path.join(input_path, filename),
str(i) + filename[filename.rfind(os.path.extsep):]
) #↑ there must be something cleaner than this :)
i += 1
Это повредится, если будут папки в input_path
(который Вы не можете hardlink), но можно легко переписать логику "поиска" файла к чему-то намного более устойчивому (рекурсивный поиск и т.д.) с помощью os.path
и os.walk
.
Я вижу принятый ответ и другой хороший ответ. Так или иначе вот сценарий, который я использовал. Это рандомизирует имена путем изменения их на последовательность хеша, вычисленную полным путем. Поскольку полный путь уникален для каждой системы, ожидается, что имена файлов не сталкиваются (это не является надежным и добавляет, что проверка была бы легка, но я не беспокоился). Этот сценарий переименовывает файлы рекурсивно, но неповрежденные имена каталогов отпуска. Используйте это путем передачи папки для применения рекурсивный переименовывает в качестве параметра.
#! /bin/bash
do_rename() {
(
export prevdir="$(pwd)"
cd "$1"
for file in *
do
if [ -d "$file" ]
then
echo "$file is a directory, renaming recursively"
do_rename "$file"
elif [ -f "$file" ]
then
dirpath="$prevdir/$1"
oldname="$dirpath/$file"
name_hash=$(echo "$oldname" | md5sum)
newname="$dirpath/${name_hash:0:32}.jpg"
echo "mv $oldname $newname"
mv $oldname $newname
fi
done
cd "$prevdir"
)
}
do_rename "$1"