Я хочу сделать эквивалент:
for i in `ls -1`; do echo $i | mv $i `sed 's/profile/account/'`; done
с xargs
ls -1 | xargs -I{} mv {} `echo {} | sed 's/profile/account/'`
Но sed
после канала в обратных тиках игнорируется.Кто-нибудь знает, почему это так?
Редактировать: Подробнее
Корень проблемы в том, чтобы просто переименовать файлы в непосредственно заданной замене шаблона (здесь замените profile
на account
, однако это решается с помощью for in
Зацикливайте файлы.
Я задаю вопрос: почему не работает следующее:
ls -1 | xargs -I{} mv {} `echo {} | sed 's/profile/account/'`
Почему часть
`echo {} | sed 's/profile/account/'`
не возвращаетзаменил имя файла, но исходное имя файла. Это как если бы |
не работал внутри обратных черт.
Чтобы написать проблему по-другому:
Если у меня есть список, как в файле с именемlist.txt
profile1.txt
profile2.txt
И хотите сгенерировать
account1.txt
account2.txt
При работе с каждой отдельной строкой отдельно, чтобы я мог запустить команду на ней.
cat list.txt | xargs -I{} echo `echo {} | sed 's/profile/account/'`
Почему команда возвращает:
profile1.txt
profile2.txt
Вместо смены профиля на учетную запись?