পাওয়ারশেলের সাথে একটি খালি ফাইল তৈরি করতে লিনাক্স `টাচ` এর সমান? [প্রতিলিপি]


167

এই প্রশ্নের ইতিমধ্যে এখানে একটি উত্তর আছে:

পাওয়ারশেলে কি এর সমতুল্য থাকে touch?

উদাহরণস্বরূপ লিনাক্সে আমি অনুরোধ করে একটি নতুন ফাঁকা ফাইল তৈরি করতে পারি:

touch filename

উইন্ডোজে এটি বেশ জটিল। সাধারণত আমি নোটপ্যাডের একটি নতুন উদাহরণটি খোলি এবং খালি ফাইলটি সংরক্ষণ করি।

সুতরাং পাওয়ারশেলের এটি করার কোনও প্রোগ্রামিক উপায় আছে?

আমি স্পর্শের আচরণের সাথে ঠিক মেলে যাচ্ছি না, তবে খালি ফাইল তৈরির পক্ষে সহজতম সমতুল্য সমতুল্য সন্ধান করতে।



ধন্যবাদ। আমি তাদের দিকে তাকালাম, তবে বেশিরভাগ উত্তর কমান্ড-প্রম্পটে ফোকাস করে। আমি একটি পাওয়ারশেল সমাধান চাই যাতে নতুন অ্যাপ্লিকেশন ইনস্টল করার প্রয়োজন হয় না।
jsalonen

প্রশ্নটিকে নিম্নচাপিত - উভয় বৈশিষ্ট্যই কোডের কয়েকটি আরও লাইন, কেবলমাত্র অর্ধ নয়, উভয়ই প্রয়োগ করে sp অনুপস্থিত অর্ধেক অন্যান্য আদেশটি যখন বিপজ্জনক হয়।
yzorg

@ ইয়জর্গ: উভয় বৈশিষ্ট্য বলতে কী বোঝ? touchলিনাক্সে আপনি যেভাবে করতে পারেন সেভাবে PS তে কীভাবে খালি ফাইল তৈরি করবেন তা আমি কেবলই জিজ্ঞাসা করছিলাম ।
jsalonen

@ জেসালোনেন touchএকটি বিদ্যমান ফাইলে * নিক্স ব্যবহার করুন এটি ফাইলটি পরিবর্তন না করে শেষ লেখার সময় আপডেট করবে, @ এমিরেলজ থেকে লিঙ্কগুলি দেখুন। এই প্রশ্নের জন্য একটি উচ্চ গুগল র‌্যাঙ্কিং রয়েছে powershell touch, আমি অনুলিপি / পেস্ট-ইয়ারদের সতর্ক করতে চেয়েছিলাম যে যখন * নিক্স স্পর্শ না করে তখন এর অর্ধেক অংশই ডেটা ধ্বংস করতে পারে। ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে @ লিটলবয়লস্টের উত্তরটি দেখুন।
yzorg

উত্তর:


164

অ্যাপেন্ড পুনঃনির্দেশক ">>" ব্যবহার করে একটি বিদ্যমান ফাইল মুছে ফেলা হবে এমন সমস্যাটি সমাধান করে:

echo $null >> filename

3
কমান্ড প্রম্পট থেকে সম্ভবত একটি ব্যাচের ফাইল থেকে 'ইকো নাল> ফাইলের নাম' নামেও পরিচিত। এর পাওয়ারশেল সংস্করণটি দেখতে শীতল, ধন্যবাদ!
মার্ক অ্যালেন

16
স্পর্শ বরং এই চেয়ে ভিন্ন হলে ফাইল আগে থেকেই আছে
জে।

9
প্রতিধ্বনি অপ্রয়োজনীয়, $null > filenameদুর্দান্ত কাজ করে।
অ্যালিরোব

8
এটি আমার জন্য ইউনিকোড বিওএম 0xFEFF এর 2 বাইট লিখেছেন।
এমিল্ট

4
গুরুত্বপূর্ণ দ্রষ্টব্য: অনেকগুলি ইউনিক্স সরঞ্জাম বিওএম নিয়ে ডিল করে না। এটি উদাহরণস্বরূপ গিট অন্তর্ভুক্ত (এমনকি উইন্ডোতেও)। আপনি যদি এমন পদ্ধতিতে তৈরি করা ফাইলগুলি বিওএমগুলি স্বীকৃতি না দিয়ে ব্যবহার করেন তবে আপনার সমস্যা হবে। উদাহরণস্বরূপ আপনি .gitignoreএই কমান্ডটি ব্যবহার করে আপনার তৈরি করার চেষ্টা করছেন এবং কেন এটি কার্যকর হবে না তা অবাক করে দিন। বিওএম এর কারণ।
মার্টিक्सी

96

একটি ফাঁকা ফাইল তৈরি করতে:

New-Item -ItemType file example.txt

কোনও ফাইলের টাইমস্ট্যাম্প আপডেট করতে:

(gci example.txt).LastWriteTime = Get-Date

4
আমি মনে করি এটিই সেরা পন্থা!
জয়েশ ভূত

এটি কোনও ফোল্ডারের টাইমস্ট্যাম্প আপডেট করার জন্য কাজ করে?
riahc3

1
@ riahc3, এই ব্যবহার করুন: (gi MyFolder).LastWriteTime = Get-Date। আপনি এটি ফাইলের জন্যও ব্যবহার করতে পারেন।
26 এ ডাং

9
আরও বেশি মজাদার:ni example.txt
নিক কক্স

2
এই পদ্ধতিটি ভয়ঙ্কর বিওএম বাইটগুলি যোগ করে না এবং এনকোডিংটি আনন্দের সাথে ইউটিএফ -8 হিসাবে উপস্থিত হবে।
দাভোস

75

এখানে একটি সংস্করণ রয়েছে যা এটি উপস্থিত না থাকলে একটি নতুন ফাইল তৈরি করে বা উপস্থিত থাকলে টাইমস্ট্যাম্প আপডেট করে।

Function Touch-File
{
    $file = $args[0]
    if($file -eq $null) {
        throw "No filename supplied"
    }

    if(Test-Path $file)
    {
        (Get-ChildItem $file).LastWriteTime = Get-Date
    }
    else
    {
        echo $null > $file
    }
}

4
এটি ইউনিক্স টাচ প্রোগ্রামটি (অন্য নামের সাথে মিলিয়ে) প্রতিলিপি দেওয়ার জন্য সঠিক উত্তর, তবে প্রশ্নটি কেবল একটি নতুন ফাইল তৈরি করার দিকে লক্ষ্যযুক্ত।
জেমি স্কেমব্রি

14
খুব, খুব ক্ষুদ্র কোয়েবল: স্পর্শ-ফাইল পিএস-এর ভার্ভ-নন নামকরণের কনভেনশনের সাথে সম্মতি জানানো হলেও, Touchএটি একটি "অনুমোদিত" ক্রিয়া নয় (এটি একটি উল্লেখযোগ্য প্রয়োজনীয়তা নয়: msdn.microsoft.com/en-us/library/ms714428)। এসপেক্স )। Fileঠিক আছে, বিটিডাব্লু আমি নাম Set-Fileবা Set-LastWriteTimeবা আমার প্রিয়, সুপারিশ Update-File। এছাড়াও, আমি Add-Content $file $nullপরিবর্তে সুপারিশ করব echo $null > $file। অবশেষে, Set-Alias touch Update-Fileআপনি যদি কমান্ডটি ব্যবহার করতে চান তবে তার সাথে একটি নাম সেট করুনtouch
অ্যালান ম্যাকবি

এটিকে সর্বশেষ লাইন হিসাবে যুক্ত করার পরামর্শ দিন:New-Alias -Name Touch Touch-File
stimpy77

25

পাওয়ারশেলে আপনি এই জাতীয় একটি স্পর্শ ফাংশন তৈরি করতে পারেন:

function touch {set-content -Path ($args[0]) -Value ($null)} 

ব্যবহার:

touch myfile.txt

উৎস


এটি দুর্দান্ত, ধন্যবাদ! আমি কি চেয়েছিলাম! পাওয়ারশেলের মধ্যে এই ফাংশনটি কীভাবে ইনস্টল করা যায় তার কোনও ধারণাগুলি যাতে আমি শেল শুরু করার সাথে সাথে এটি স্বয়ংক্রিয়ভাবে লোড হয়?
jsalonen

2
এটি আপনার প্রোফাইল ফাইলে যুক্ত করুন। (ফাইলটি সম্পাদনা করতে নোটপ্যাড $ প্রোফাইল চালান))
মার্ক অ্যালেন

25
এটি উপস্থিত থাকলে ফাইলের বিষয়বস্তু মুছে ফেলা হবে।
dangph

1
বা নিরাপদ সংস্করণ যা বিদ্যমান ফাইলের সামগ্রীগুলি সাফ করে না function touch { if((Test-Path -Path ($args[0])) -eq $false) { set-content -Path ($args[0]) -Value ($null) } }
অ্যালাস্টয়ার্ট্রি

13

আমি পছন্দ করি

fc > filename

এই কাজের জন্য খালি খালি ফাইলগুলির সাথে কাজ করতে আপনি ব্যবহার করতে পারেন

fc >> filename

fcফর্ম্যাট-কাস্টম জন্য কেবল একটি উপনাম । আমি এটি বেছে নিয়েছি কারণ এটি একটি শর্ট কমান্ড যা এই প্রসঙ্গে কিছুই করে না, একটি নুপ । এটি দুর্দান্তও কারণ আপনি যদি পুনর্নির্দেশটি ভুলে যান

fc filename

আপনাকে ত্রুটি দেওয়ার পরিবর্তে, এটি আবার কিছুই করে না। কাজ করবে এমন আরও কিছু উপাধি হ'ল

ft -> Format-Table
fw -> Format-Wide

9

ইতিমধ্যে যোগ্য উত্তরগুলির একটি গুচ্ছ রয়েছে, তবে আমি বেশিরভাগ নিউ-আইটেমের ওরফে পছন্দ করি যা ঠিক: নি

আপনি ফাইল টাইপ ডিক্লেয়ারেশনটিও (যা আমি অনুমান করি যে কোনও এক্সটেনশন যুক্ত হওয়ার পরে অন্তর্ভুক্ত), সুতরাং আমার বর্তমান ডিরেক্টরিতে 'এক্স' নাম সহ একটি জাভাস্ক্রিপ্ট ফাইল তৈরি করতে আমি কেবল লিখতে পারি:

ni x.js

স্পর্শ চেয়ে দ্রুত চার অক্ষর!


এটি আদর্শবান নয়ni : The file 'x.js' already exists
স্টিভেন পেনি

8

আমি বিভিন্ন উত্স একসাথে রেখেছি এবং নীচের সাথে জখম করেছি, যা আমার প্রয়োজনগুলি পূরণ করে। আমার একটি ডিএলএল রচনার তারিখটি সেট করা দরকার যা একটি মেশিনে আলাদা টাইম জোনে নির্মিত হয়েছিল:

$update = get-date
Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update

অবশ্যই, আপনি এটি একাধিক ফাইলের জন্যও সেট করতে পারেন:

Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update

1
লাস্টওয়ারাইটটাইমটি কোনও ফাইলে পরিবর্তন করার জন্য সর্বাধিক পাওয়ারশেল-ইশ উপায়ের জন্য +1 (যা আমার প্রয়োজন ছিল), যদিও প্রশ্নটি টাচ কমান্ডের নতুন ফাইল তৈরি বৈশিষ্ট্যটির উপর দৃষ্টি নিবদ্ধ করে।
নাথান হার্টলি

কোনও ভেরিয়েবল ব্যবহার না করে?
riahc3

5

আপনার প্রোফাইল ফাইলটি খুলুন:

notepad $profile

নিম্নলিখিত লাইন যুক্ত করুন:

function touch {New-Item "$args" -ItemType File}

এটি সংরক্ষণ করুন এবং আপনার প্রোফাইলটি সরাসরি ব্যবহারের জন্য পুনরায় লোড করুন। (পাওয়ারশেল বন্ধ এবং খোলার দরকার নেই)

. $profile

বর্তমান ডিরেক্টরিতে একটি নতুন ফাইল যুক্ত করতে টাইপ করুন:

touch testfile.txt

'মাইফোল্ডার' ডিরেক্টরিতে একটি নতুন ফাইল যুক্ত করতে টাইপ করুন:

touch myfolder\testfile.txt

যদি একই নামের ফাইলটি ইতিমধ্যে উপস্থিত থাকে, তবে এটি আউট হবে না। পরিবর্তে আপনি একটি ত্রুটি পাবেন।

আমি আসা করি এটা সাহায্য করবে

বোনাস টিপ:

আপনি নিম্নলিখিত রেখাটি যুক্ত করে 'এমকেডির' এর সমতুল্য তৈরি করতে পারেন:

function mkdir {New-Item "$args" -ItemType Directory} 

একই ব্যবহার:

mkdir testfolder
mkdir testfolder\testsubfolder

5
ac file.txt $null

ফাইলের সামগ্রীগুলি মুছবে না তবে এটি তারিখটি আপডেটও করবে না।


5

দেখে মনে হচ্ছে উত্তরগুলির একগুচ্ছ ফাইল এনকোডিংয়ের জন্য অ্যাকাউন্ট নয়।

আমি কেবল এই সমস্যার মধ্যে পড়েছিলাম, অন্যান্য বিভিন্ন কারণে, কিন্তু

echo $null > $file

$null > $file

উভয় একটি UTF-16-LE ফাইল উত্পাদন করে, যখন

New-Item $file -type file

একটি ইউটিএফ -8 ফাইল তৈরি করে।

যে কারণেই হোক না কেন fc > $fileএবং fc >> $fileইউটিএফ -8 ফাইল তৈরি করে বলে মনে হচ্ছে।

Out-File $file -encoding utf8

কিছু সময় আপনাকে একটি UTF-8-BOM ফাইল দেয়

Out-File $file -encoding ascii

আপনাকে একটি ইউটিএফ -8 ফাইল দেয়। আউট-ফাইল সমর্থন করে এমন অন্যান্য বৈধ (তবে অনির্ধারিত) এনকোডিংগুলি হ'ল: [[--এনকোডিং] {অজানা | স্ট্রিং | ইউনিকোড | বিগেন্ডিয়ানুনিকোড | utf8 | utf7 | utf32 | ascii | ডিফল্ট | ই এম}]। আপনি ফাইলটিকে স্টোরের জন্য কিছু পাঠ্য ডেটা দিতে আউট-ফাইলে স্টাফও পাইপ করতে পারেন, এবং একটি পতাকাও যুক্ত করতে পারেন। উদাহরণ স্বরূপ:

echo $null | Out-File .\stuff.txt -Encoding ascii -Append

এই উদাহরণটি কোনও কারণে টাইমস্ট্যাম্প আপডেট করে না, তবে এটি একটি করে:

echo foo | Out-File .\stuff.txt -Encoding ascii -Append

যদিও এটি ফাইলের শেষে "foo" যুক্ত করার পার্শ্ব প্রতিক্রিয়া রাখে।

আপনার কী এনকোডিং রয়েছে তা সম্পর্কে আপনি যদি অনিশ্চিত থাকেন তবে আমি খুঁজে পেয়েছি ভিএস-কোডের একটি নিফটি বৈশিষ্ট্য রয়েছে যেখানে নীচের ডানদিকে কোণায় এটি এনকোডিংটি কী তা বলে। আমি মনে করি নোটপ্যাড ++ এরও একই বৈশিষ্ট্য রয়েছে।


Set-Content -Path $file -value $nullকাজটি করে এবং এটি ফাইল এনকোডিংকে প্রভাবিত করে না। এর এসএস version৪ সংস্করণওtouch পরীক্ষা করে দেখুন ।
আন্তোন ক্রোগলভ

3

আপনি বর্ণিত দৃশ্যের জন্য (যখন ফাইলটি উপস্থিত নেই), এটি দ্রুত এবং সহজ:

PS> sc example.txt $null

তবে এর অন্যান্য সাধারণ ব্যবহার touchহ'ল ফাইলটির টাইমস্ট্যাম্প আপডেট করা। আপনি যদি আমার scউদাহরণটি সেভাবে ব্যবহার করার চেষ্টা করেন তবে এটি ফাইলের বিষয়বস্তুগুলি মুছে ফেলবে।


1
ধন্যবাদ! কী scমানে? সম্পাদনা করুন: এটি বের করে ("সামগ্রী নির্ধারণ করুন")
jsalonen

2

উইন্ডোতে খালি ফাইল তৈরি করতে, দ্রুততম উপায়টি নিম্নলিখিত:

fsutil file createnew file.name 0

শূন্যটি বাইটে ফাইলাইজ করা হয়, তাই এটি বৃহত ফাইল তৈরি করতেও কার্যকর (তারা প্রকৃত ডেটা ধারণ করে না বলে তারা সংকোচনের পরীক্ষার জন্য কার্যকর হবে না এবং প্রায় কিছুই কমপ্রেস করবে না)


2

ওয়েবপৃষ্ঠাটি http://xahlee.info/powershell/Powershell_for_unixer.html পরামর্শ দেয়:

new-item -type file [filename]

এবং এটি প্রকৃতপক্ষে শূন্য আকারের একটি নতুন ফাইল তৈরি করবে।

এটি ইউনিক্সের অন্যান্য ক্রিয়াকলাপটি সম্পাদন করে না touch, যেমন ফাইলের নামটি ইতিমধ্যে উপস্থিত থাকলে টাইমস্ট্যাম্প আপডেট করতে পারে , তবে প্রশ্নটি বোঝায় যে ব্যবহারকারী কেবল নোটপ্যাডের অবলম্বন ছাড়াই ইন্টারেক্টিভভাবে একটি শূন্য আকারের ফাইল তৈরি করতে চান।


1

আমি "লিখন-ফাইল" নামটি ব্যবহার করেছি কারণ "টাচ" অনুমোদিত পাওয়ারশেল ক্রিয়া নয় । আমি এখনও এটি স্পর্শ হিসাবে উপনাম।

Touch.psm1

<#
 .Synopsis
  Creates a new file or updates the modified date of an existing file.

 .Parameter Path
  The path of the file to create or update.
#>
Function Write-File {
    [CmdletBinding()]
    Param(
       [Parameter( Mandatory=$True, Position=1 )]
       [string] $Path,
       [switch] $WhatIf,
       [System.Management.Automation.PSCredential] $Credential
    )
    $UseVerbose = $PSCmdlet.MyInvocation.BoundParameters['Verbose'].IsPresent -eq $True
    $UseDebug = $PSCmdlet.MyInvocation.BoundParameters['Debug'].IsPresent -eq $True
    $TimeStamp = Get-Date
    If( -Not [System.Management.Automation.WildcardPattern]::ContainsWildcardCharacters( $Path ) ) {
        New-Item -ItemType:File -Verbose:$UseVerbose -Debug:$UseDebug -WhatIf:$WhatIf -Credential $Credential -Path $Path -ErrorAction SilentlyContinue -Confirm:$False | Out-Null
    }
    Set-ItemProperty -Verbose:$UseVerbose -Debug:$UseDebug -WhatIf:$WhatIf -Credential $Credential -Path $Path -Name LastWriteTime -Value:$TimeStamp -Confirm:$False | Out-Null
}

Set-Alias -Name touch -Value Write-File

Export-ModuleMember -Function Write-File
Export-ModuleMember -Alias touch

ব্যবহার:

Import-Module ./Touch.psm1
touch foo.txt

সমর্থন:

  • অন্যান্য ডিরেক্টরিতে পাথ
  • Credential নেটওয়ার্ক পাথ জন্য
  • Verbose, Debugএবং WhatIfপতাকাগুলি
  • ওয়াইল্ডকার্ডস (শুধুমাত্র টাইমস্ট্যাম্প আপডেট)

New-Itemকমান্ড চার পূর্ববর্তী উত্তর দেওয়া হয়েছে। আপনি এটির জন্য একটি 20-লাইনের মোড়ক সরবরাহ করেছেন। আগের সমাধানগুলির তুলনায় আপনার সমাধানটির কী কী সুবিধা রয়েছে তা আপনি আরও কিছুটা পরিষ্কারভাবে ব্যাখ্যা করতে পারেন? উদাহরণ হিসেবে বলা যায়, এসব হচ্ছে কি Verbose, Debugএবং WhatIfপতাকা, ইত্যাদি?
স্কট

এই উত্তরের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য এবং New-Itemএটি হ'ল বিদ্যমান ফাইলগুলির টাইমস্ট্যাম্প আপডেট করে।
jpaugh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.