2014-11-11 5 views
1

У меня есть следующие файлы в каталоге:Как перемещать файлы на основе определенного диапазона длин символов?

f.txt 
fi.txt 
fil.txt 
file.txt 
filen.txt 
filena.txt 
filenam.txt 
filename.txt 
filenametoolong.txt 

Я хочу, чтобы переместить все, кроме последнего. Это следующее регулярное выражение относится к моим потребностям:^{1,13} .txt

Однако, используя регулярное выражение с с "мв"

mv ^.{1,13}\.txt trashdir 

Результаты в

mv: cannot stat `^.1.txt': No such file or directory 
mv: cannot stat `^.24.txt': No such file or directory 

у меня есть. проверили и дважды проверили синтаксис регулярного выражения, и он кажется действительным. Что мне не хватает?

ответ

2

mv команда не поддерживает регулярное выражение. Вы можете использовать find с -regex вариант:

find . -maxdepth 1 -type f -regex '\./.\{1,13\}' -exec mv {} /trashdir + 
+0

Ну, это ... смешно. Во всяком случае, что такое «+» в конце? Кроме того, хорошо ли удалять префикс «/» перед «trashdir», поэтому он не будет пытаться выполнить root? – Lakitu

+0

Да, вы можете использовать любой относительный путь вместо '/ trashdir' в качестве целевого каталога. '+' для прекращения вашей команды, которая приходит после '-exec' и считается более эффективной, чем использование' \; '. Проверьте 'man find' для получения более подробной информации. – anubhava

+0

Я попробовал вашу команду, но получил 'find: missing argument to '-exec'' Я разделил команду find, чтобы просто найти. -regex '\ ./. \ {1,13 \}' ', и это выглядит пустым. – Lakitu