У меня есть список файлов, похожий на следующий, и мне нужно удалить обратный слеш:
\jskadn.txt
\jsandkjasn5.txt
Я попробовал выполнить следующую команду, но она не работает :
rename " \\*.txt" "*.txt"
С помощью переименования файлов на основе Perl:
$ rename --version
/usr/bin/rename с использованием File::Rename версии 1.10
затем используя sed
-стиль регулярного выражения s/pattern/replacement/
:
$ rename -vn 's/\\\//' \\\*.txt
rename(\jsandkjasn5.txt, jsandkjasn5.txt)
rename(\jskadn.txt, jskadn.txt)
С помощью util-linux
rename (который принимает простые шаблоны
замены
аргументов):
$ rename.ul --version
rename.ul из util-linux 2.34
then:
$ rename.ul -vn '\' '' \\\*.txt
`\jsandkjasn5.txt' -> `jsandkjasn5.txt'
`\jskadn.txt' -> `jskadn.txt'
(вы можете использовать \\\
вместо '\'
, если хотите). Уберите переключатель -n
(no-op), когда убедитесь, что они поступают правильно.
Для полноты, используя mmv
:
$ mmv -n '\\\*' '#1'
\jsandkjasn5.txt -> jsandkjasn5.txt
\jskadn.txt -> jskadn.txt
Или простой цикл оболочки:
$ for f in \\\\*.txt; do echo mv "$f" "${f#?}"; done
mv \jsandkjasn5.txt jsandkjasn5.txt
mv \jskadn.txt jskadn.txt
(удалите echo
в этом случае).