我有一个名为/input/temp
的文件夹。在文件夹里面我有很多文件。我需要找到模式Article_????_test_?????????.txt
的文件,并用下面的格式替换。
Article_????_?????????.txt
以下是我尝试的代码,但不起作用:
echo "Please provide the file name Corresponding to DC..."
read file
ls $HOME/*.txt | grep $file
if [ $? -eq 0 ]
find . $file '*_Test_*' -exec bash -c 'mv $0 ${0/_Test/ }' {} \;
if [ $? -eq 0 ]
find . $file -name "*.txt" -exec bash -c "mv {} \`echo {} | sed -e 's/[_TEST_]/_/g'\`" \;
then
我得到以下错误:
find: 0652-083 Cannot execute bash:: A file or directory in the path name does not exist.
find: 0652-083 Cannot execute bash:: A file or directory in the path name does not exist.
bash无法在我的平台上执行。
答案 0 :(得分:1)
if [ -e "$file" ]
代替ls
+ grep
+ test
。find . $file '*_Test_*'
时,最后三个参数实际上被视为要在下面搜索的文件或目录!它会回来
$file
中的所有文件或路径$file
,如果它不是目录,和 *_Test_*
或匹配的目录中的所有文件(如果它们不是目录)。bash
- 您可以直接在mv
中运行-exec
。这只是额外的复杂性,没有收获。$(command)
代替command
,以便更轻松地处理报价。每个command
都有一个单独的引用上下文,因此您可以执行$()
。答案 1 :(得分:0)
根据链接here: 这应该工作
ls -1 Article_????test?????????.txt|awk '{old=$0;gsub(/test/,"_",$0);system("mv \""old"\" "$0)}'
答案 2 :(得分:0)
同时尝试“重命名”命令。
rename 's/_test_/_/' *.txt
您可以微调正则表达式...
答案 3 :(得分:0)
从您的代码更新:
cd $HOME
find . -name '*_Test_*' |while read line
do
echo mv ${line) ${line/_Test/}
done
如果你需要搜索模式文章_ ???? 测试 ?????????。txt,试试这个
cd $HOME
find . -name 'Article_????_test_?????????.txt' |while read line
do
echo mv ${line) ${line/_Test/}
done