Как вставить строку в каждое имя файла

Ваш код не содержит строк для поиска в данном каталоге и сравнения файлов внутри этого каталога с данными файлами (req_files.txt). Все, что вы делаете, это продолжайте перезаписывать (поскольку вы используете оператор > , используйте >> для добавления вместо этого) файла a.txt с содержимым req_files.txt один за другим и когда сценарий завершает работу, остается только последний элемент, записанный в a.txt.

Насколько я понимаю, ваша цель:

Найти и перечислить все файлы внутри указанного пути. Затем сравните этот список с файлами, перечисленными в req_files.txt. И, наконец, перечислите совпадающие в выходном файле a.txt. В этом случае код ниже сделает это за вас:

cwd=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
cd $cwd #change dir to the required path
>a.txt  # create output file a.txt
for file in `ls`:
do
        grep "`echo "$file"`" req_files.txt >> a.txt
done

Теперь в цикле for вы выводите список файлов с помощью команды ls. Этот сценарий создаст файл a.txt внутри заданного пути, который содержит файлы из req_files.txt, которые присутствуют в этом заданном пути.

1
26.06.2017, 02:22
5 ответов

Используйтепереименуйте команду :

rename 's/\.bak$//' *.bak

  • 's/\.bak$//'- выражение perlдля соответствия всем именам файлов, заканчивающимся на .bakи удалите расширение
1
27.01.2020, 23:33

По подсказке ответа RomanPerekhrestздесь, эта команда мне подходит.

rename .bak '' *.bak
0
27.01.2020, 23:33

Что-то, что должно работать на всех платформах:

for i in *.bak
do
  mv $i `echo $i | sed 's/\.bak$//'`
done
0
27.01.2020, 23:33

Цикл должен работать (в POSIX-подобной оболочке):

for f in *.bak; do 
    mv -- "$f" "${f%.*}"
done

И как одна строка:

for f in *.bak; do mv -- "$f" "${f%.*}"; done
2
27.01.2020, 23:33
#!/bin/bash
for val in \`ls *.bat`
do
    mv $val `echo $val | cut -f1 -d'.'`
done
-1
27.01.2020, 23:33

Теги

Похожие вопросы