Хотите сделать текстовые файлы для каждого png в папке

просто убедитесь, что вы выбрали последнюю версию phpStorm. 27 января 2018 года - версия PhpStorm-2017.3.3.tar.gz

sudo apt-get purge openjdk*
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
wget https://download-cf.jetbrains.com/webide/PhpStorm-2017.3.3.tar.gz

tar -xvf PhpStorm-2017.3.3.tar.gz
cd PhpStorm-173.4301.34/bin
./phpstorm.sh
12
задан 11 April 2017 в 17:24

31 ответ

Вы можете использовать команду basename здесь:

touch "$folder/$(basename "$filePng" .png).txt"

Обратите внимание на дополнительный $folder/. Это необходимо, так как команда basename удаляет путь из.

16
ответ дан 22 May 2018 в 23:45
  • 1
    Могу ли я предложить вам процитировать расширение параметра и подстановку команд? – Tom Fenech 12 April 2017 в 11:37
  • 2
    @TomFenech да, вероятно, хорошая идея процитировать всю строку. Я отредактировал свой ответ. – Wayne_Yux 12 April 2017 в 16:31
  • 3
    Я не уверен, почему вы удалили внутренние кавычки вокруг $filePng - они тоже были полезны. – Tom Fenech 12 April 2017 в 16:40
  • 4
    Нет, потому что $( ) устанавливает новый контекст цитирования. – Tom Fenech 12 April 2017 в 17:43
  • 5
    О, ты прав - узнал что-то новое сегодня ;-) – Wayne_Yux 12 April 2017 в 17:57

Вы можете использовать команду basename здесь:

touch "$folder/$(basename "$filePng" .png).txt"

Обратите внимание на дополнительный $folder/. Это необходимо, так как команда basename удаляет путь из.

16
ответ дан 18 July 2018 в 15:11

Вы можете использовать команду basename здесь:

touch "$folder/$(basename "$filePng" .png).txt"

Обратите внимание на дополнительный $folder/. Это необходимо, так как команда basename удаляет путь из.

16
ответ дан 24 July 2018 в 20:34

Вы можете использовать команду basename здесь:

touch "$folder/$(basename "$filePng" .png).txt"

Обратите внимание на дополнительный $folder/. Это необходимо, так как команда basename удаляет путь из.

16
ответ дан 31 July 2018 в 10:44

Вы можете использовать команду basename здесь:

touch "$folder/$(basename "$filePng" .png).txt"

Обратите внимание на дополнительный $folder/. Это необходимо, так как команда basename удаляет путь из.

16
ответ дан 31 July 2018 в 11:48

Вы можете использовать команду basename здесь:

touch "$folder/$(basename "$filePng" .png).txt"

Обратите внимание на дополнительный $folder/. Это необходимо, так как команда basename удаляет путь из.

16
ответ дан 31 July 2018 в 23:36

Вы можете удалить существующее расширение с помощью функций расширения параметров оболочки

${parameter%pattern} «pattern» сопоставляется с концом «параметра». Результатом является расширенное значение параметра с самым коротким совпадением.

Итак, в вашем случае замените $filePng.txt на "${filePng%.png}.txt"

32
ответ дан 22 May 2018 в 23:45

С изменением того, что уже упоминалось ранее - расширение параметра - мы можем использовать замену строки для выполнения задания. Кроме того, вы должны указывать переменные. Ниже приведен отредактированный скрипт.

#!/bin/bash

folder='/home/data/mnist/training'

for filePng in "$folder"/*
do
    touch "${filePng/.png/.txt}"
done
10
ответ дан 22 May 2018 в 23:45

Если у вас много файлов для создания, было бы целесообразно «касаться» более чем одного файла за раз, так что вам не нужно разветвлять новый процесс для каждого из них (что занимает довольно много времени если это выполняется несколько тысяч раз).

Вариант 1: подстановка шаблона + xargs

Эта опция будет поставлять несколько путей к команде touch сразу, обычно несколько тысяч или независимо от того, какая система может поместиться в одной командной строке.

find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 |
sed -ze 's/\.png$/.txt/' |
xargs -r0 -- touch --

Вариант 2: расширение параметра + перенаправление выходных команд

Этот параметр не запускает touch вообще, а использует Bash / Bourne / POSIX, которые вообще не требуют подпроцессов.

for f in "$folder"/*.png; do
    : >> "${f%.png}.txt"
done
9
ответ дан 22 May 2018 в 23:45

Если вы уверены, что у вас нет файлов с .png где-то посередине имени, вы можете просто использовать массив с расширением параметра:

pngs=( /path/to/pngs/*.png )
touch "${pngs[@]/.png/.txt}"

В этом магазине все пути к файлам, заканчивающимся на .png в массиве, а затем использует расширение параметра для создания списка файлов .txt, заменив .png на .txt на каждом из них.

Bear в виду, что это сломается, если у вас так много файлов, что они не могут быть переданы в качестве аргументов для одного и того же вызова touch.

4
ответ дан 22 May 2018 в 23:45

Если у вас много файлов для создания, было бы целесообразно «касаться» более чем одного файла за раз, так что вам не нужно разветвлять новый процесс для каждого из них (что занимает довольно много времени если это выполняется несколько тысяч раз).

Вариант 1: подстановка шаблона + xargs

Эта опция будет поставлять несколько путей к команде touch сразу, обычно несколько тысяч или независимо от того, какая система может поместиться в одной командной строке.

find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 | sed -ze 's/\.png$/.txt/' | xargs -r0 -- touch --

Вариант 2: расширение параметра + перенаправление выходных команд

Этот параметр не запускает touch вообще, а использует Bash / Bourne / POSIX, которые вообще не требуют подпроцессов.

for f in "$folder"/*.png; do : >> "${f%.png}.txt" done
9
ответ дан 18 July 2018 в 15:11

С изменением того, что уже упоминалось ранее - расширение параметра - мы можем использовать замену строки для выполнения задания. Кроме того, вы должны указывать переменные. Ниже приведен отредактированный скрипт.

#!/bin/bash folder='/home/data/mnist/training' for filePng in "$folder"/* do touch "${filePng/.png/.txt}" done
10
ответ дан 18 July 2018 в 15:11

Вы можете удалить существующее расширение с помощью функций расширения параметров оболочки

${parameter%pattern} «pattern» сопоставляется с концом «параметра». Результатом является расширенное значение параметра с самым коротким совпадением.

Итак, в вашем случае замените $filePng.txt на "${filePng%.png}.txt"

32
ответ дан 18 July 2018 в 15:11

Если вы уверены, что у вас нет файлов с .png где-то посередине имени, вы можете просто использовать массив с расширением параметра:

pngs=( /path/to/pngs/*.png ) touch "${pngs[@]/.png/.txt}"

В этом магазине все пути к файлам, заканчивающимся на .png в массиве, а затем использует расширение параметра для создания списка файлов .txt, заменив .png на .txt на каждом из них.

Bear в виду, что это сломается, если у вас так много файлов, что они не могут быть переданы в качестве аргументов для одного и того же вызова touch.

4
ответ дан 18 July 2018 в 15:11

Если у вас много файлов для создания, было бы целесообразно «касаться» более чем одного файла за раз, так что вам не нужно разветвлять новый процесс для каждого из них (что занимает довольно много времени если это выполняется несколько тысяч раз).

Вариант 1: подстановка шаблона + xargs

Эта опция будет поставлять несколько путей к команде touch сразу, обычно несколько тысяч или независимо от того, какая система может поместиться в одной командной строке.

find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 | sed -ze 's/\.png$/.txt/' | xargs -r0 -- touch --

Вариант 2: расширение параметра + перенаправление выходных команд

Этот параметр не запускает touch вообще, а использует Bash / Bourne / POSIX, которые вообще не требуют подпроцессов.

for f in "$folder"/*.png; do : >> "${f%.png}.txt" done
9
ответ дан 24 July 2018 в 20:34

С изменением того, что уже упоминалось ранее - расширение параметра - мы можем использовать замену строки для выполнения задания. Кроме того, вы должны указывать переменные. Ниже приведен отредактированный скрипт.

#!/bin/bash folder='/home/data/mnist/training' for filePng in "$folder"/* do touch "${filePng/.png/.txt}" done
10
ответ дан 24 July 2018 в 20:34

Вы можете удалить существующее расширение с помощью функций расширения параметров оболочки

${parameter%pattern} «pattern» сопоставляется с концом «параметра». Результатом является расширенное значение параметра с самым коротким совпадением.

Итак, в вашем случае замените $filePng.txt на "${filePng%.png}.txt"

32
ответ дан 24 July 2018 в 20:34

Если вы уверены, что у вас нет файлов с .png где-то посередине имени, вы можете просто использовать массив с расширением параметра:

pngs=( /path/to/pngs/*.png ) touch "${pngs[@]/.png/.txt}"

В этом магазине все пути к файлам, заканчивающимся на .png в массиве, а затем использует расширение параметра для создания списка файлов .txt, заменив .png на .txt на каждом из них.

Bear в виду, что это сломается, если у вас так много файлов, что они не могут быть переданы в качестве аргументов для одного и того же вызова touch.

4
ответ дан 24 July 2018 в 20:34

Если у вас много файлов для создания, было бы целесообразно «касаться» более чем одного файла за раз, так что вам не нужно разветвлять новый процесс для каждого из них (что занимает довольно много времени если это выполняется несколько тысяч раз).

Вариант 1: подстановка шаблона + xargs

Эта опция будет поставлять несколько путей к команде touch сразу, обычно несколько тысяч или независимо от того, какая система может поместиться в одной командной строке.

find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 | sed -ze 's/\.png$/.txt/' | xargs -r0 -- touch --

Вариант 2: расширение параметра + перенаправление выходных команд

Этот параметр не запускает touch вообще, а использует Bash / Bourne / POSIX, которые вообще не требуют подпроцессов.

for f in "$folder"/*.png; do : >> "${f%.png}.txt" done
9
ответ дан 31 July 2018 в 10:44

С изменением того, что уже упоминалось ранее - расширение параметра - мы можем использовать замену строки для выполнения задания. Кроме того, вы должны указывать переменные. Ниже приведен отредактированный скрипт.

#!/bin/bash folder='/home/data/mnist/training' for filePng in "$folder"/* do touch "${filePng/.png/.txt}" done
10
ответ дан 31 July 2018 в 10:44

Вы можете удалить существующее расширение с помощью функций расширения параметров оболочки

${parameter%pattern} «pattern» сопоставляется с концом «параметра». Результатом является расширенное значение параметра с самым коротким совпадением.

Итак, в вашем случае замените $filePng.txt на "${filePng%.png}.txt"

32
ответ дан 31 July 2018 в 10:44

Если вы уверены, что у вас нет файлов с .png где-то посередине имени, вы можете просто использовать массив с расширением параметра:

pngs=( /path/to/pngs/*.png ) touch "${pngs[@]/.png/.txt}"

В этом магазине все пути к файлам, заканчивающимся на .png в массиве, а затем использует расширение параметра для создания списка файлов .txt, заменив .png на .txt на каждом из них.

Bear в виду, что это сломается, если у вас так много файлов, что они не могут быть переданы в качестве аргументов для одного и того же вызова touch.

4
ответ дан 31 July 2018 в 10:44

Если у вас много файлов для создания, было бы целесообразно «касаться» более чем одного файла за раз, так что вам не нужно разветвлять новый процесс для каждого из них (что занимает довольно много времени если это выполняется несколько тысяч раз).

Вариант 1: подстановка шаблона + xargs

Эта опция будет поставлять несколько путей к команде touch сразу, обычно несколько тысяч или независимо от того, какая система может поместиться в одной командной строке.

find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 | sed -ze 's/\.png$/.txt/' | xargs -r0 -- touch --

Вариант 2: расширение параметра + перенаправление выходных команд

Этот параметр не запускает touch вообще, а использует Bash / Bourne / POSIX, которые вообще не требуют подпроцессов.

for f in "$folder"/*.png; do : >> "${f%.png}.txt" done
9
ответ дан 31 July 2018 в 11:48

С изменением того, что уже упоминалось ранее - расширение параметра - мы можем использовать замену строки для выполнения задания. Кроме того, вы должны указывать переменные. Ниже приведен отредактированный скрипт.

#!/bin/bash folder='/home/data/mnist/training' for filePng in "$folder"/* do touch "${filePng/.png/.txt}" done
10
ответ дан 31 July 2018 в 11:48

Вы можете удалить существующее расширение с помощью функций расширения параметров оболочки

${parameter%pattern} «pattern» сопоставляется с концом «параметра». Результатом является расширенное значение параметра с самым коротким совпадением.

Итак, в вашем случае замените $filePng.txt на "${filePng%.png}.txt"

32
ответ дан 31 July 2018 в 11:48

Если вы уверены, что у вас нет файлов с .png где-то посередине имени, вы можете просто использовать массив с расширением параметра:

pngs=( /path/to/pngs/*.png ) touch "${pngs[@]/.png/.txt}"

В этом магазине все пути к файлам, заканчивающимся на .png в массиве, а затем использует расширение параметра для создания списка файлов .txt, заменив .png на .txt на каждом из них.

Bear в виду, что это сломается, если у вас так много файлов, что они не могут быть переданы в качестве аргументов для одного и того же вызова touch.

4
ответ дан 31 July 2018 в 11:48

Если у вас много файлов для создания, было бы целесообразно «касаться» более чем одного файла за раз, так что вам не нужно разветвлять новый процесс для каждого из них (что занимает довольно много времени если это выполняется несколько тысяч раз).

Вариант 1: подстановка шаблона + xargs

Эта опция будет поставлять несколько путей к команде touch сразу, обычно несколько тысяч или независимо от того, какая система может поместиться в одной командной строке.

find "$folder" -mindepth 1 -maxdepth 1 -name '*.png' -print0 | sed -ze 's/\.png$/.txt/' | xargs -r0 -- touch --

Вариант 2: расширение параметра + перенаправление выходных команд

Этот параметр не запускает touch вообще, а использует Bash / Bourne / POSIX, которые вообще не требуют подпроцессов.

for f in "$folder"/*.png; do : >> "${f%.png}.txt" done
9
ответ дан 31 July 2018 в 23:36

С изменением того, что уже упоминалось ранее - расширение параметра - мы можем использовать замену строки для выполнения задания. Кроме того, вы должны указывать переменные. Ниже приведен отредактированный скрипт.

#!/bin/bash folder='/home/data/mnist/training' for filePng in "$folder"/* do touch "${filePng/.png/.txt}" done
10
ответ дан 31 July 2018 в 23:36

Вы можете удалить существующее расширение с помощью функций расширения параметров оболочки

${parameter%pattern} «pattern» сопоставляется с концом «параметра». Результатом является расширенное значение параметра с самым коротким совпадением.

Итак, в вашем случае замените $filePng.txt на "${filePng%.png}.txt"

32
ответ дан 31 July 2018 в 23:36

Если вы уверены, что у вас нет файлов с .png где-то посередине имени, вы можете просто использовать массив с расширением параметра:

pngs=( /path/to/pngs/*.png ) touch "${pngs[@]/.png/.txt}"

В этом магазине все пути к файлам, заканчивающимся на .png в массиве, а затем использует расширение параметра для создания списка файлов .txt, заменив .png на .txt на каждом из них.

Bear в виду, что это сломается, если у вас так много файлов, что они не могут быть переданы в качестве аргументов для одного и того же вызова touch.

4
ответ дан 31 July 2018 в 23:36

Другие вопросы по тегам:

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