2016-09-17 4 views
1

Я застрял ищу однострочник добавить префикс ко всем именам вложенных папок и имена файлов в директорииКак префикс папок и файлов внутри?

например, «ААА» в примерах ниже

/folder/AAAfile.txt

/folder/AAAread/AAAdoc.txt

/folder/AAAread/AAAfinished/AAAread.txt

Я попытался с помощью xargs и найти, но не может заставить их идти рекурсивно через подкаталогов и их палатки. Какие-либо предложения? Джеймс

ответ

1

Вы могли бы использовать что-то вроде этого

find . -mindepth 1 | sort -r | xargs -l -I {} bash -c 'mv $1 ${1%/*}/AAA${1##*/}' _ {}

Испытаны с вашей структурой папок , выполненный из корня (то же, что и файл AAAfile.txt).

+1

Хорошее использование расширения параметров с удалением подстроки и обратного сортировки для защиты от переименования каталога перед файлами внутри. –

0

Следующий скрипт должны удовлетворить ваши потребности (побежал внутри вашей folder директории):

for i in `ls -R`;do 
     dname=`dirname $i` 
     fname=AAA`basename $i` 
     if [ -f $i ] 
     then 
       mv $i $dname/$fname 
     fi 
     #this could be merged with previous condition but have been kept just to avoid invalid directory warning 
     if [ -d $i ] 
     then 
       mv $i $dname/$fname 
     fi 
done