Напишите функцию, меняющую расширение в имени файла на заданное, например, на bak
Обновлено: 21.11.2024
(PHP 4, PHP 5, PHP 7, PHP 8)
copy — Копирует файл
Описание
Создает копию файла из в в .
Если вы хотите переместить файл, используйте функцию rename().
Параметры
Путь к исходному файлу.
Путь назначения. Если to является URL-адресом, операция копирования может завершиться ошибкой, если оболочка не поддерживает перезапись существующих файлов.
Если целевой файл уже существует, он будет перезаписан.
Действительный ресурс контекста, созданный с помощью stream_context_create() .
Возвращаемые значения
Возвращает true в случае успеха или false в случае неудачи.
Примеры
$file = 'example.txt';
$newfile = 'example.txt.bak' ;
if (! copy ( $file , $newfile )) echo "не удалось скопировать $file . \n" ;
>
?>
См. также
- move_uploaded_file() — перемещает загруженный файл в новое место.
- rename() — переименовывает файл или каталог
- Раздел руководства о загрузке файлов
Примечания, внесенные пользователями 23 примечания
Потратив часы на исправление ошибки copy(): Отказано в доступе (и должным образом беспокоясь о chmod на winXP), стоит отметить, что «назначение» должно содержать фактическое имя файла! --- НЕ просто путь к папке, в которую вы хотите скопировать.
УЖАС!
надеюсь, это сэкономит кому-то часы бесплодной отладки
Мне потребовалось много времени, чтобы понять, в чем проблема, когда у меня возникает ошибка в функции copy(). Он НЕ создает никаких каталогов. Он копирует только существующий путь. Поэтому создайте каталоги заранее. Надеюсь, я помогу,
Не забывайте; вы можете использовать копирование удаленных файлов, а не делать грязные вещи fopen. например
if(!@ copy( 'http://someserver.com/somefile.zip', './somefile.zip' ))
$errors = error_get_last ();
Эхо "ОШИБКА КОПИРОВАНИЯ: " . $ошибки ['тип'];
эхо "
\n" . $errors [ 'message' ];
> else echo "Файл скопирован с удаленного компьютера!" ;
>
?>
Вот простой скрипт, который я использую для удаления и копирования непустых каталогов. Очень полезно, когда вы не уверены в типе файла.
Я использую их для управления папками и zip-архивами для плагинов моего веб-сайта.
// удаляет файлы и непустые каталоги
функция rrmdir ( $dir ) if ( is_dir ( $dir )) $files = scandir ( $dir );
foreach ($files as $file)
if ($file != "." && $file != ".." ) rrmdir ("$dir / $file");
rmdir ( $dir );
>
else if ( file_exists ( $dir )) удалить связь ( $dir );
>
// копирует файлы и непустые каталоги
function rcopy ( $src , $dst ) if ( file_exists ( $dst )) rrmdir ( $dst );
if ( is_dir ( $src )) mkdir ( $dst );
$files = скандир ( $src );
foreach ($files as $file)
if ($file != "." && $file != ".." ) rcopy ("$src / $file", "$dst / $ файл " );
>
else if ( file_exists ( $src )) copy ( $src , $dst );
>
?>
Ура! р>
Хороший простой трюк, если вам нужно сначала убедиться, что папка существует:
$srcfile = 'C:\File\Whatever\Path\Joe.txt' ;
$dstfile = 'G:\Shared\Reports\Joe.txt' ;
mkdir(dirname($dstfile), 0777, true);
копировать ( $srcfile , $dstfile );
Ниже фрагмент кода для загрузки файла с веб-сервера в локальный файл.
Он демонстрирует полезные настройки запроса (такие как настройка User-Agent и Referrer, которые часто требуются веб-сайтам) и как загружать только файлы, если копия на веб-сайте новее, чем локальная копия. р>
Дополнительно демонстрируется обработка заголовков ответов (если они заданы сервером) для определения метки времени и имени файла. Тип файла проверяется, поскольку некоторые серверы возвращают код возврата 200 OK с текстовой страницей «не найдено» вместо правильного кода возврата 404.
// $fURI: URL-адрес файла, расположенного на веб-сервере
// $target_file: Путь к локальному файлу
if (file_exists ($target_file)) $ifmodhdr = 'If-Modified-Since:'. дата ("r", время_файла ($ target_file)). "\r\n" ;
>
else $ifmodhdr = '' ;
>
// устанавливаем заголовок запроса для GET с реферером для измененных файлов, следующих за перенаправлениями
$arrRequestHeaders = array(
'http' =>array(
'method' => 'GET ' ,
'protocol_version' => 1.1 ,
'follow_location' => 1 ,
'header' => "User-Agent: Anamera-Feed/1.0\r\n" . < br />"Referer: $source \r\n" .
$ifmodhdr
)
);
$rc = copy ($fURI, $target_file, stream_context_create ($arrRequestHeaders));
Каждый день системным администраторам приходится выполнять различные стандартные операции с многочисленными файлами и папками на своих серверах Windows. Эти задачи часто включают в себя управление данными пользователей на общих ресурсах и правильное поддержание резервных копий. Вы можете использовать PowerShell, чтобы уменьшить объем ручной работы.
Прежде чем начать, убедитесь, что ваша системная политика разрешает выполнение сценариев PowerShell, как описано в «Учебнике по написанию сценариев Windows PowerShell для начинающих».
Просмотр объектов в каталоге
Чтобы просмотреть содержимое каталога на файловом сервере Windows, используйте командлет Get-ChildItem. Чтобы показать все скрытые файлы, добавьте параметр -Force. Приведенная ниже команда показывает все корневые объекты в общей папке:
Если вы хотите также проверять все подпапки и их содержимое, добавьте параметр -Recurse:
Чтобы отфильтровать вывод, добавьте параметры Filter, Exclude, Include и Path в командлет Get-ChildItem. Для расширенной фильтрации объектов используйте командлет Where-Object. Приведенный ниже сценарий ищет все исполняемые файлы в папке IT, которые были изменены после 1 апреля 2018 г.:
Создание файлов и папок с помощью PowerShell
Чтобы создать новые объекты с помощью Windows PowerShell, вы можете использовать командлет New-Item и указать тип создаваемого элемента, например каталог, файл или раздел реестра.
Например, эта команда создает папку:
И эта команда создает пустой файл:
Создание файлов и запись в них данных
Существует как минимум два встроенных метода для создания файла и записи в него данных. Во-первых, используйте командлет Out-File:
Чтобы перезаписать существующий файл, используйте параметр –Force.
Вы также можете создавать файлы с помощью командлета Export-Csv, который экспортирует выходные данные в файл csv, который можно открыть в Excel:
Создайте файлы, убедившись, что они еще не существуют
Следующий сценарий проверяет, существует ли уже определенный файл (pc.txt) в определенной папке; если нет, он создает список всех компьютеров AD и сохраняет его в новый файл с именем pc.txt:
Удаление файлов и папок с помощью PowerShell
Чтобы удалить объекты, используйте командлет Remove-Item. Обратите внимание, что при выполнении требуется ваше подтверждение, если объект не пустой. В приведенном ниже примере показано, как удалить папку IT и все вложенные в нее папки и файлы:
Если вы уже убедились, что все объекты в папке должны быть удалены, вы можете использовать переключатель ?Recurse, чтобы пропустить шаг подтверждения:
Удалить файлы и папки старше X дней
Иногда вам нужно удалить старые файлы из определенного каталога. Вот как это сделать:
Удалить файлы после проверки их существования
Вот как проверить, существует ли файл, и удалить его, если он существует:
Удаление файлов с нескольких компьютеров одним скриптом
Чтобы удалить файлы с удаленных компьютеров, у вас должны быть соответствующие разрешения безопасности для доступа к ним. Обязательно используйте пути UNC, чтобы сценарий правильно определял расположение файлов.
Копировать файлы и папки с помощью PowerShell
Командлет Copy-Item позволяет копировать объекты с одного пути на другой. Следующая команда создает резервную копию, копируя файл users.xlsx с одного удаленного компьютера (fs) и сохраняя его на другом (fs2) по сети:
Если целевой файл уже существует, попытка копирования завершится неудачей. Чтобы перезаписать существующий файл, даже если он находится в режиме только для чтения, используйте параметр -Force:
Копировать файлы с помощью PowerShell на удаленный компьютер или с него
Если вы копируете файлы на удаленные компьютеры или с них, обязательно используйте пути UNC.
Например, используйте эту команду для копирования файлов с удаленного файлового сервера в локальный каталог C::
Чтобы скопировать файлы из локального каталога в удаленную папку, просто поменяйте местами источник и место назначения:
Копировать несколько файлов с одного сервера на другой по сети в одном скрипте
Вы также можете копировать файлы с одного удаленного сервера на другой. Следующий скрипт рекурсивно копирует папку \\fs\Shared\temp в \\fs\Shared\test:
Копировать только определенные типы файлов
Чтобы скопировать только определенные файлы из исходного содержимого в целевое, используйте параметр -Filter. Например, следующая команда копирует только текстовые файлы из одной папки в другую:
Копировать файлы с помощью команд XCOPY и ROBOCOPY или COM-объектов
Вы также можете запускать команды XCOPY и ROBOCOPY для копирования файлов или использовать COM-объекты, как в примере ниже:
Перемещение файлов и каталогов с помощью PowerShell
Командлет Move-Item перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного места в другое. Он также может перемещать файл или подкаталог из одного каталога в другое место.
Следующая команда перемещает определенный файл резервной копии из одного места в другое:
Этот сценарий перемещает всю папку резервных копий и ее содержимое в другое место:
Каталог Backups со всеми его файлами и подпапками появится в каталоге архива.
Переименовать файлы с помощью PowerShell
Командлет Rename-Item позволяет изменить имя объекта, не затрагивая его содержимое.Невозможно переместить элементы с помощью команды Rename-Item; для этой функции следует использовать командлет Move-Item, как описано выше.
Следующая команда переименовывает файл:
Переименовать несколько файлов
Чтобы переименовать несколько файлов одновременно, используйте такой скрипт:
Изменить расширения файлов с помощью PowerShell
Вы также можете использовать Rename-Item для изменения расширений файлов. Если вы хотите изменить расширения сразу нескольких файлов, используйте командлет Rename-Item с командлетом Get-ChildItem.
Следующий скрипт изменяет все расширения файлов «txt» на «bak». Подстановочный знак (*) обеспечивает включение всех текстовых файлов:
Используя информацию в этой статье, вы можете автоматизировать множество простых операций, связанных с управлением файлами в ваших файловых хранилищах, и сэкономить время для более важных задач. Удачи!
Как я могу создать файл?
Используйте командлет New-Item для создания файла:
При создании файла перезаписывается любой существующий файл с таким же именем, поэтому вам может потребоваться проверить, существует ли уже этот файл.
Вы также можете использовать командлет New-Item для создания папок, каталогов или разделов реестра.
Как создать текстовый файл
Чтобы создать новый объект с помощью Windows PowerShell, используйте командлет New-Item и укажите тип создаваемого элемента, например:
Как создать каталог
Чтобы создать новый каталог с помощью PowerShell, используйте командлет New-Item:
Вы также можете использовать командлет New-Item для создания файлов, папок или разделов реестра
Как удалить файл?
Чтобы удалить объект, используйте командлет Remove-Item. Подтверждение будет запрошено при выполнении, если объект не пустой.
Вы также можете удалить все файлы старше X дней или удалить файлы с нескольких компьютеров с помощью PowerShell.
Как скопировать файл?
Используйте командлет Copy-Item для копирования объектов с одного пути на другой. Следующая команда создает резервную копию, копируя файл users.xlsx с одного удаленного компьютера (fs) на другой (fs2) по сети:
Обратите внимание: если целевой файл уже существует, попытка копирования завершится неудачей. Узнайте, как перезаписывать файлы при их копировании с удаленного компьютера или на него.
Как переместить файл?
Командлет Move-Item перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного места в другое:
Как переименовать файл?
Чтобы переименовать один файл с помощью PowerShell, используйте следующую команду:
Вы также можете переименовать несколько файлов с помощью PowerShell.
Ян — бывший специалист по техническому маркетингу в Netwrix. Он ИТ-специалист с более чем 15-летним опытом и активный блоггер PowerShell.
В этом документе перечислены команды для создания, копирования, переименования и удаления файлов и каталогов Unix. Предполагается, что вы используете Unix в службе входа в систему ITS (login.itd.umich.edu). Приведенные здесь инструкции применимы ко многим другим машинам Unix; однако вы можете заметить другое поведение, если вы не используете службу входа в ITS.
Что такое файлы и каталоги Unix?
Файл — это «контейнер» для данных. Unix не делает различий между типами файлов — файл может содержать текст документа, данные для программы или саму программу.
Каталоги позволяют упорядочивать файлы, позволяя группировать связанные файлы вместе. Каталоги могут содержать файлы и/или другие каталоги. Каталоги аналогичны папкам Macintosh и Windows.
Именование файлов и каталогов Unix
У каждого файла и каталога есть имя. В каталоге каждый элемент (то есть каждый файл или каталог) должен иметь уникальное имя, но элементы с одинаковым именем могут существовать более чем в одном каталоге. Каталог может иметь то же имя, что и один из содержащихся в нем элементов.
Имена файлов и каталогов могут содержать до 256 символов. Имена могут использовать практически любой символ (кроме пробела). Вы можете разделить имя файла, состоящее из нескольких слов, с помощью символа подчеркивания или точки (например, Chapter_one или Chapter.two).
Некоторые символы имеют особое значение для Unix. Лучше избегать использования этих символов в именах файлов:
Unix чувствителен к регистру. Каждый из них является уникальным файлом: myfile, Myfile, myFile и MYFILE.
Создание файла
Многие люди создают файлы с помощью текстового редактора, но вы можете использовать команду cat для создания файлов без использования или обучения использованию текстового редактора. Чтобы создать учебный файл (называемый firstfile) и ввести в него одну строку текста, введите в командной строке % следующее:
Завершите ввод файла, нажав Control-d в отдельной строке. (Удерживая нажатой клавишу Control, введите d.) На экране вы увидите:
Чтобы просмотреть содержимое только что созданного файла, введите его в строке %:
Копирование файла
Чтобы создать дубликат файла, используйте команду cp. Например, чтобы создать точную копию файла с именем firstfile, введите:
В результате появляются два файла с разными именами, каждый из которых содержит одинаковую информацию. Команда cp перезаписывает информацию. Если вы создадите другой файл с именем ThirdFile, а затем введите следующую команду:
вы обнаружите, что исходное содержимое первого файла исчезло и заменено содержимым третьего файла.
Переименование файла
В Unix нет специальной команды для переименования файлов. Вместо этого команда mv используется как для изменения имени файла, так и для перемещения файла в другой каталог.
Чтобы изменить имя файла, используйте следующий формат команды (где Thirdfile и file3 — примеры имен файлов):
Эта команда приводит к полному удалению третьего файла, но новый файл с именем файл3 содержит предыдущее содержимое третьего файла.
Как и cp, команда mv перезаписывает существующие файлы. Например, если у вас есть два файла, четвертый и второй, и вы вводите команду
mv удалит исходное содержимое второго файла и заменит его содержимым четвертого файла. В результате четвертый файл переименовывается во второй файл, но при этом второй файл удаляется.
Удаление файла
Используйте команду rm для удаления файла. Например,
удаляет файл3 и его содержимое. Вы можете удалить более одного файла за раз, указав список файлов, которые необходимо удалить. Например,
Вам будет предложено подтвердить, действительно ли вы хотите удалить файлы:
Введите y или yes, чтобы удалить файл; введите n или нет, чтобы оставить его без изменений.
Создание каталога
Создание каталогов позволяет упорядочивать файлы. Команда
создает каталог с именем project1, где вы можете хранить файлы, относящиеся к конкретному проекту. Созданный вами каталог будет подкаталогом внутри вашего текущего каталога. Подробнее о навигации по каталогам и отображении содержащихся в них файлов и каталогов см. в разделе Список содержимого и навигация по каталогам Unix.
Перемещение и копирование файлов в каталог
Команды mv и cp можно использовать для помещения файлов в каталог. Предположим, вы хотите поместить некоторые файлы из вашего текущего каталога во вновь созданный каталог с именем project1. Команда
переместит библиографию файлов в каталог project1. Команда
поместит копию файла Chapter1 в каталог Project1, но оставит Chapter1 нетронутым в текущем каталоге. Теперь будет две копии главы 1: одна в текущем каталоге, а другая в проекте 1.
Переименование каталога
Вы также можете использовать команду mv для переименования и перемещения каталогов. Когда вы вводите команду
каталог с именем проект1 получит новое имя проект2, если ранее каталог с именем проект2 не существовал. Если каталог project2 уже существовал до того, как была введена команда mv,
переместит каталог project1 и его файлы в каталог project2.
Копирование каталога
Вы можете использовать команду cp для создания копии каталога и его содержимого. Например, чтобы скопировать каталог project1 в каталог proj1copy, введите
Если каталог proj1copy уже существует, эта команда поместит копию каталога project1 в каталог proj1copy\.
Удаление каталога
Используйте команду rmdir, чтобы удалить пустой каталог. Несколько пустых каталогов можно удалить, перечислив их после команды:
Если вы попытаетесь удалить каталог, который не пуст, вы увидите
rmdir: testdir3: Каталог не пустой
Если вы уверены, что хотите удалить каталог и все содержащиеся в нем файлы, используйте команду
Сводка команд
Работа с файлами
mv файл1 файл2
Переименовывает файл1 в файл2 (если файл2 существовал ранее, перезаписывает исходное содержимое файла2).
cp файл1 файл2
Копирует файл1 как файл2 (если файл2 существовал ранее, перезаписывает исходное содержимое файла2).
rm файл3 файл4
Удаляет файл3 и файл4, запрашивая подтверждение для каждого удаления.
Работа с каталогами
mkdir dir1
Создает новый каталог с именем dir1.
mv dir1 dir2
Если dir2 не существует, переименовывает dir1 в dir2.
Если каталог dir2 существует, каталог dir1 перемещается внутрь каталога dir2.
cp -r dir1 dir2
Если dir2 не существует, копирует dir1 как dir2.
Если каталог dir2 существует, копирует dir1 внутрь dir2.
rmdir dir1
Удаляет dir1, если dir1 не содержит файлов.
rm -r dir1
Удаляет dir1 и все содержащиеся в нем файлы. Используйте с осторожностью.
Работа с файлами и каталогами
cp file1 dir1
Копирует файл file1 в существующий каталог dir1.
mv file2 dir2
Перемещает файл file2 в существующий каталог dir2.
Предположим, что из index.py с CGI у меня есть почтовый файл foo.fasta для отображения файла. Я хочу изменить расширение файла foo.fasta на foo.aln в отображаемом файле. Как мне это сделать?
9 ответов 9
Элегантный способ использования pathlib.Path:
Хотя OP не просил выполнить переименование, оно было в тегах, и если вы собираетесь выполнить переименование и, если возможно, входные данные могут иметь путь, а не только имя файла, этот метод правильный.
Используйте первую функцию, чтобы получить базу. Объедините его с новым расширением и передайте старое имя файла и новое имя файла второй функции.
Исправление: os.rename(root, root + new_extension) должно читаться как os.rename(renamee, root + new_extension)
На самом деле лучше использовать этот метод вместо python3: pathlib.path(pathtofile).with_suffix(".mynewext"). Способ, предложенный с pathlib.path(pathtofile).stem, работает, но удалит путь перед базовым именем.
Где thisFile = абсолютный путь к файлу, который вы изменяете
Мне нравится этот ответ больше, потому что он дает пример, а не просто цитирует методы, необходимые для выполнения задачи. Спасибо @FryDay
Начиная с Python 3.4 имеется встроенная библиотека pathlib. Таким образом, код может быть примерно таким:
Это еще лучше с синтаксисом интерполяции строк Python 3.6 ( python.org/dev/peps/pep-0498 ) new_filename = f".aln" 😎😎😎
Будьте осторожны — стебель также удаляет путь, если он присутствует. Если бы вы хотели переименовать файл и если бы был указан путь (которого, по общему признанию, не было в вопросе), этот метод не работал.
Кроме того, результатом является строка, а не pathlib. p.parent / (p.stem + '.aln') даст вам новый путь.
А вот как это работает:
Метод splitext отделяет имя от расширения, создавая кортеж:
созданный кортеж теперь содержит строки "name" и "fasta". Затем вам нужно получить доступ только к строке «имя», которая является первым элементом кортежа:
А затем вы хотите добавить к этому имени новое расширение:
Как упомянул AnaPana, pathlib является более новым и простым в python 3.4, и есть новый метод with_suffix, который может легко справиться с этой проблемой:
Использование pathlib и сохранение полного пути:
К сожалению, я столкнулся со случаем, когда в имени файла было несколько точек, и разделение текста не работало должным образом. моя работа вокруг:
Некоторая информация относится к предварительной версии продукта, которая может быть существенно изменена до ее выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.
Изменяет расширение строки пути.
Параметры
Информация о пути для изменения.
Новое расширение (с начальной точкой или без нее). Укажите значение null, чтобы удалить существующее расширение из пути .
Возврат
Информация об измененном пути.
На настольных платформах на базе Windows, если путь имеет значение null или пустую строку (""), информация о пути возвращается без изменений. Если расширение равно null , возвращаемая строка содержит указанный путь с удаленным расширением. Если путь не имеет расширения и расширение не равно null , возвращаемая строка пути содержит расширение, добавленное к концу пути.
Исключения
Примеры
В следующем примере показано использование метода ChangeExtension.
Примечания
Если ни путь, ни расширение не содержат точки (.), ChangeExtension добавляет точку.
Параметр расширения может содержать несколько точек и любые допустимые символы пути и может быть любой длины. Если расширение равно null , возвращаемая строка содержит содержимое пути с удаленной последней точкой и всеми символами, следующими за ним.
Если расширение является пустой строкой, возвращаемая строка пути содержит содержимое пути с удаленными любыми символами после последней точки.
Если путь не имеет расширения и расширение не равно null , возвращаемая строка содержит путь, за которым следует расширение .
Если расширение не равно null и не содержит ведущей точки, точка добавляется.
Если путь содержит несколько расширений, разделенных несколькими точками, возвращаемая строка содержит содержимое пути, в котором последняя точка и все символы, следующие за ней, заменены на расширение . Например, если путь "\Dir1\examples\pathtests.csx.txt" и расширение "cs", измененный путь будет "\Dir1\examples\pathtests.csx.cs".
Невозможно проверить, что возвращенные результаты действительны во всех сценариях. Например, если путь пуст, добавляется расширение.
Читайте также: